Python轻松解决excel文件处理

请先下载好pandas和openpyxl两个库:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl

提示:进行数据比对前或者关联前要进行左右两端去空格

from openpyxl import load_workbook

# 打开Excel文件
wb = load_workbook('your_file.xlsx')

# 选择要操作的工作表
sheet = wb['Sheet1']  # 将'Sheet1'替换为实际的工作表名

# 遍历所有单元格,清除左右两端的空格
for row in sheet.iter_rows():
    for cell in row:
        if cell.value:
            cell.value = cell.value.strip()

# 保存修改后的Excel文件
wb.save('modified_file.xlsx')

# 关闭Excel文件
wb.close()

1.取消excel里面的合并单元格

import pandas as pd
​
# 读取 Excel 文件
df = pd.read_excel('C:\\Users\\Desktop\\江西省4级行政4级流域分区表 (version 1).xls', sheet_name='Sheet5')
​
# 将合并单元格的数据向上移动到第一个单元格
df_shifted = df.applymap(lambda x: x if pd.notnull(x) else '').shift(0)
​
# 填充拆分后的单元格
df_filled = df_shifted.ffill()
​
# 输出取消合并单元格后的数据
print(df_filled)
​
# 将数据输出到 Excel 文件
df_filled.to_excel('demo1.xlsx', index=False)
​

2.取消excel里面的合并单元格,并且拆分的单元格数据都和合并之前的一样

import pandas as pd
from openpyxl import load_workbook
​
# 读取 Excel 文件
file_path = r'C:/Users/Desktop/test.xlsx'
df = pd.read_excel(file_path, sheet_name='Sheet1')
​
# 创建一个新的数据框,与原始数据框 df 的大小相同
df_expanded = pd.DataFrame(index=range(df.shape[0]), columns=range(df.shape[1]))
​
# 加载 Excel 文件以获取合并单元格信息
wb = load_workbook(file_path)
​
# 选择指定的工作表
ws_name = 'Sheet1'
ws = wb[ws_name]
merged_cells_ranges = ws.merged_cells
​
# 遍历原始数据框中的每个单元格
for row in range(df.shape[0]):
    for col in range(df.shape[1]):
        value = df.iloc[row, col]
​
        # 检查当前单元格是否处于一个合并单元格
        merged_range = None
        for cell_range in merged_cells_ranges:
            if (cell_range.min_row <= row + 1 <= cell_range.max_row and
                    cell_range.min_col <= col + 1 <= cell_range.max_col):
                merged_range = cell_range
                break
​
        # 如果单元格是合并的
        if merged_range:
            start_row, end_row, start_col, end_col = (merged_range.min_row, merged_range.max_row,
                                                      merged_range.min_col, merged_range.max_col)
​
            # 填充合并前的值到拆分后的单元格
            df_expanded.loc[start_row-1:end_row, start_col-1:end_col] = value
​
        # 如果单元格没有合并,直接复制到新的数据框
        elif pd.notnull(value):
            df_expanded.loc[row, col] = value
​
# 输出处理后的数据
print(df_expanded)
​
# 将数据输出到 Excel 文件
df_expanded.to_excel('demo2.xlsx', index=False)

3.消除所有单元格数据间存在空格的情况

import pandas as pd
import re
from openpyxl import load_workbook
​
# 读取 Excel 文件
file_path = r'C:/Users/Desktop/test.xlsx'
df = pd.read_excel(file_path, sheet_name='Sheet1')
​
# 创建一个新的数据框,与原始数据框 df 的大小相同
df_expanded = pd.DataFrame(index=range(df.shape[0]), columns=range(df.shape[1]))
​
# 加载 Excel 文件以获取合并单元格信息
wb = load_workbook(file_path)
​
# 选择指定的工作表
ws_name = 'Sheet1'
ws = wb[ws_name]
merged_cells_ranges = ws.merged_cells
​
# 遍历原始数据框中的每个单元格
for row in range(df.shape[0]):
    for col in range(df.shape[1]):
        value = df.iloc[row, col]
​
        # 检查当前单元格是否处于一个合并单元格
        merged_range = None
        for cell_range in merged_cells_ranges:
            if (cell_range.min_row <= row + 1 <= cell_range.max_row and
                    cell_range.min_col <= col + 1 <= cell_range.max_col):
                merged_range = cell_range
                break
​
        # 如果单元格是合并的
        if merged_range:
            start_row, end_row, start_col, end_col = (merged_range.min_row, merged_range.max_row,
                                                      merged_range.min_col, merged_range.max_col)
​
            # 填充合并前的值到拆分后的单元格,并去除空格
            value_no_space = re.sub(r'\s+', '', str(value))  # 使用正则表达式去除多个连续的空格
            df_expanded.loc[start_row-1:end_row, start_col-1:end_col] = value_no_space
​
        # 如果单元格没有合并,直接复制到新的数据框,并去除空格
        elif pd.notnull(value):
            value_no_space = re.sub(r'\s+', '', str(value))  # 使用正则表达式去除多个连续的空格
            df_expanded.loc[row, col] = value_no_space
​
# 输出处理后的数据
print(df_expanded)
​
# 将数据输出到 Excel 文件
df_expanded.to_excel('demo2.xlsx', index=False)

4.让空格数据向上填充空白单元格

import pandas as pd
​
# 读取 Excel 文件
file_path = r'C:\Users\PycharmProjects\untitled7\data\demo2.xlsx'
df = pd.read_excel(file_path, sheet_name='Sheet1')
​
# 使用 fillna() 方法向上填充空白单元格
df_filled = df.fillna(method='ffill')
​
# 输出处理后的数据
print(df_filled)
​
# 将数据输出到 Excel 文件
df_filled.to_excel('data\\demo3.xlsx', index=False)

5.去除某列数据间的空格

import pandas as pd
​
# 读取 Excel 文件
file_path = r'C:\Users\PycharmProjects\untitled7\data\demo3.xlsx'
df = pd.read_excel(file_path, sheet_name='Sheet1')
​
# 使用正则表达式去除 Unnamed: 2 列单元格数据内部的空格
df['Unnamed: 2'] = df['Unnamed: 2'].apply(lambda x: ''.join(x.split()) if isinstance(x, str) else x)
​
# 输出处理后的数据
print(df)
​
# 将数据输出到 Excel 文件,并将空值替代字符串为空字符串
df.to_excel('data\\demo5.xlsx', index=False, na_rep='')

6.对某字段重复的进行去重,取重复中的第一个行。

import pandas as pd
​
# 读取 Excel 文件
file_path = r'C:\Users\PycharmProjects\数据中台\data\demo3.xlsx'
df = pd.read_excel(file_path)
​
# 根据某列字段去除重复行,保留每个重复字段的第一个行数据
df = df.drop_duplicates(subset=['Unnamed: 6'], keep='first')
​
# 输出处理后的数据
print(df)
​
# 将数据输出到 Excel 文件
df.to_excel('data\\demo4.xlsx', index=False)

7.两表关联,取需要的字段。

import pandas as pd
​
# 读取 Excel 文件
file_path = r'C:\Users\PycharmProjects\数据中台\data\demo3.xlsx'
df = pd.read_excel(file_path)
​
# 根据某列字段去除重复行,保留每个重复字段的第一个行数据
df = df.drop_duplicates(subset=['Unnamed: 6'], keep='first')
​
# 输出处理后的数据
print(df)
​
# 将数据输出到 Excel 文件
df.to_excel('data\\demo4.xlsx', index=False)

8.合并两个excel中的某两列为新的一列

import pandas as pd
​
# 读取第一个Excel文件
df1 = pd.read_excel(r'C:\Users\PycharmProjects\数据中台\data\demo8.xlsx')
​
# 读取第二个Excel文件
df2 = pd.read_excel(r'C:\Users\PycharmProjects\数据中台\data\demo4.xlsx')
​
# 按列拼接两个DataFrame对象
merged_df = pd.concat([df1['Unnamed: 3'], df2['Unnamed: 6']], axis=0, ignore_index=True)
​
# 导出到Excel文件
merged_df.to_excel('data\\demo10.xlsx', index=False)

9.在其中一个excel中的某列和另一个excel中的某列进行对比,分别找出前面excel有的字段,后面那个excel没有的字段和后面那个excel有的字段,前面excel没有的字段进行分别输出

import pandas as pd
​
# 读取第一个Excel文件
df1 = pd.read_excel(r'C:\Users\PycharmProjects\数据中台\data\demo10.xlsx')
​
# 读取第二个Excel文件
df2 = pd.read_excel(r'C:\Users\PycharmProjects\数据中台\data\ATT_WRZ_BASE.xlsx')
​
# 合并两个DataFrame对象
merged_df = pd.merge(df1, df2, left_on='code', right_on='WRZ_CODE', how='outer')
​
# 提取前一个文件存在后一个文件不存在的字段
diff_df1 = merged_df.loc[merged_df['WRZ_CODE'].isnull(), 'code']
​
# 提取后一个文件存在前一个文件不存在的字段
diff_df2 = merged_df.loc[merged_df['code'].isnull(), 'WRZ_CODE']
​
# 导出到Excel文件
diff_df1.to_excel('data\\diff_output_df1.xlsx', index=False)
diff_df2.to_excel('data\\diff_output_df2.xlsx', index=False)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值