如何利用遍历得到的文件名读取并按指定列合并Excel文件?
解决Excel文件读取与按指定列合并的问题
先修正几个关键问题
- 直接用
path+filename拼接路径容易出错(比如路径末尾无斜杠时会导致路径拼接错误),改用os.path.join()才是规范写法 - 读取Excel不需要手动
open(),pandas的read_excel()可以直接接收文件路径
完整实现代码
import os import pandas as pd # 目标文件夹路径 path = '/Desktop/somefolder' # 用于存储所有读取后的DataFrame df_list = [] # 遍历文件夹中的文件,只处理Excel格式 for filename in os.listdir(path): if filename.lower().endswith(('.xlsx', '.xls', '.xlsm')): # 正确拼接文件完整路径 full_path = os.path.join(path, filename) # 读取Excel为DataFrame df = pd.read_excel(full_path) # 可选:添加一列记录数据来源文件路径,方便后续溯源 df['source_file'] = full_path # 将当前DataFrame加入列表 df_list.append(df)
两种合并方式(根据你的需求选择)
1. 按指定列对齐后纵向堆叠(concat)
如果是要把所有Excel的数据按列名对齐,纵向拼接到一起,同时基于指定列排序:
# 替换为你的目标列名 target_column = '你的指定列名' # 纵向拼接所有DataFrame,重置索引 combined_df = pd.concat(df_list, axis=0, ignore_index=True) # 按指定列排序(可选) combined_df = combined_df.sort_values(by=target_column).reset_index(drop=True)
2. 按指定列作为主键进行关联合并(merge)
如果是要像SQL JOIN那样,基于指定列匹配不同Excel中的数据:
# 替换为你的目标主键列名 key_column = '你的指定列名' # 以第一个DataFrame为基础,依次合并后续所有DataFrame combined_df = df_list[0] for df in df_list[1:]: # how参数可选:inner(交集)/outer(并集)/left(左表全保留)/right(右表全保留) combined_df = pd.merge(combined_df, df, on=key_column, how='outer')
注意事项
- 确保所有Excel文件的目标列名完全一致(大小写、空格都要对应),否则合并会失效
- 如果Excel有多个工作表,可在
read_excel()中指定sheet_name参数(比如sheet_name='Sheet1') - 若文件较大,可考虑分块读取优化内存占用
内容的提问来源于stack exchange,提问作者FalloutATS21
相关产品推荐
相关产品推荐

