大家好,我是Python进阶者。
一、前言
前几天在Python白银交流群【干锅牛蛙】问了一个Python处理Excel数据的问题。问题如下:有两个问题哈:1、表头有合并单元格识别不出来,如何处理类似下图
2、遇到单元格有公式自动识别成了0,如何处理,保留计算后的值,类似下图

附上他自己的代码如下:
1目前代码:import pandas as pd 2import os 3 4# 读取所有xlsx文件并逐个合并子表 5folder_path = r'C:/Users/mengxianqiao/merge_excel_files/测试数据' # 替换成实际的文件夹路径 6 7all_data = {} 8 9# 遍历文件 10for file_name in os.listdir(folder_path): 11 if file_name.endswith(".xlsx"): 12 file_path = os.path.join(folder_path, file_name) # 拼接绝对路径 13 xls = pd.ExcelFile(file_path) # 创建excel对象 14 # 遍历sheet 15 for sheet_name in xls.sheet_names: 16 if sheet_name not in all_data: # 如果sheet不存在,在字典中创建新sheet 17 all_data[sheet_name] = pd.DataFrame() 18 19 # 获取表头行数(默认为1) 20 header_rows = pd.read_excel(file_path, sheet_name=sheet_name, nrows=1).shape[0] 21 # print(header_rows) 22 # 读取数据时跳过已经读取过的表头行 23 sheet_data = pd.read_excel(file_path, sheet_name=sheet_name, skiprows=range(1, header_rows+1)) 24 # print(sheet_data) 25 all_data[sheet_name] = pd.concat([all_data[sheet_name], sheet_data], ignore_index=True) 26 27# 将所有合并后的数据保存到一个整体的CSV文件中 28output_csv = r"C:/Users/mengxianqiao/merge_excel_files/测试数据/汇总.xlsx" # 替换成实际的输出文件路径 29 30with pd.ExcelWriter(output_csv, engine='openpyxl') as writer: 31 for sheet_name, df in all_data.items(): 32 df.to_excel(writer, sheet_name=sheet_name, index=False) 33 34print("数据已成功合并并保存到总表.xlsx。")
二、实现过程
这里【瑜亮老师】、【鶏啊鶏。】、【Python进阶者】都给了一个思路,如下图所示:读取的时候不读取表头,跳过前2行。这个方法可以,上次处理那个民评议表,跳过了前四行。

这就是直接跳过,然后手动加一行表头。代码如下:
1import pandas as pd 2import pathlib 3# 获取文件夹中每个Excel文件的路径 4folder = r"C:\Users\Desktop\民主评议表" 5excel_files = pathlib.Path(folder).glob('*.xls') 6header = ['姓名', '以学铸魂', '以学增智', '以学正风', '以学促干'] 7data = [] 8for i in excel_files: 9 # 读取Excel文件,并跳过前4行,使用前5列数据 10 df = pd.read_excel(i, skiprows=4, header=None, index_col=0, usecols="A:F") 11 df.dropna(inplace=True) 12 df.columns = header
如果是openpyxl的话,读取的时候,有个data_only=True参数,得到的就是数值了。之前在钻石群里有人问过。

后来【论草莓如何成为冻干莓】还给了一个思路如下:

代码如下:
1import numpy as np 2import pandas as pd 3 4 5df = pd.DataFrame(np.random.randint(1, 10, size=(20, 10))) 6 7with pd.ExcelWriter('写入合并表头.xlsx', engine='openpyxl') as writer: 8 book = writer.book 9 sheet_name = '写入合并表头' 10 df.to_excel(writer, sheet_name=sheet_name, index=False, startrow=1) 11 sh = book[sheet_name] 12 sh['A1'] = '表头合并' 13 sh.merge_cells(f'A1:H1') # 合并A1到H1的单元格
实现效果如下:

【黄志诚】感慨道:现在就感觉用pandas分析,用openpyxl美化,写入。
如果你也有类似这种Python相关的小问题,欢迎随时来交流群学习交流哦,有问必答!
三、总结
大家好,我是皮皮。这篇文章主要盘点了一个Python处理Excel数据的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。
最后感谢粉丝【干锅牛蛙】提出的问题,感谢【瑜亮老师】、【鶏啊鶏。】、【Python进阶者】、【论草莓如何成为冻干莓】给出的思路,感谢【莫生气】、【黄志诚】等人参与学习交流。
【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。

