问题:有几百个excel表,这些表有些字段意义一样但命名不同,也有一些表中有独有的字段
需求·:合并这几百个excel表到一个表中,意义相同但字段名不同的也合并在一起,保留独有的字段
目前:用了一下pandas中concat,但是意义相同字段名不同的合并不到一列,有没有办法能解决,谢谢
问题:有几百个excel表,这些表有些字段意义一样但命名不同,也有一些表中有独有的字段
需求·:合并这几百个excel表到一个表中,意义相同但字段名不同的也合并在一起,保留独有的字段
目前:用了一下pandas中concat,但是意义相同字段名不同的合并不到一列,有没有办法能解决,谢谢
参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。
在Python中使用pandas合并多个Excel文件时,如果遇到字段(列)意义相同但命名不同的情况,你需要先对列名进行统一处理,然后再进行合并。以下是一个大概的步骤:
read_excel
函数将它们逐个读入为DataFrame。import pandas as pd
import os
# 指定包含Excel文件的目录
directory = 'path_to_your_directory'
# 初始化一个空列表来存储所有数据帧
data_frames = []
# 遍历目录下所有文件
for filename in os.listdir(directory):
if filename.endswith('.xlsx') or filename.endswith('.xls'): # 检查是否是Excel文件
filepath = os.path.join(directory, filename)
df = pd.read_excel(filepath)
data_frames.append(df)
rename
函数。# 假设你有这样一个映射规则
column_mapping = {
'old_column_name1': 'new_common_name1',
'different_column_name1': 'new_common_name2', # 不同表中的不同列名对应同一个新名称
# ... 其他列名映射...
}
# 应用到每个DataFrame上
for i, df in enumerate(data_frames):
data_frames[i] = df.rename(columns=column_mapping)
pd.concat
函数将它们垂直(按行)合并在一起。# 合并所有DataFrame
merged_df = pd.concat(data_frames, ignore_index=True) # 使用ignore_index=True重置索引
merged_df
中。注意:在实际操作前,请确保所有具有相同含义的列的数据类型一致,否则可能需要进一步的数据预处理和清洗工作。
如果你想要水平(按列)合并,即同一行内合并不同源的列数据,则可能需要用到merge
函数,并根据共同的键(如时间戳或ID等)来进行合并。