Pandas批量读取文件夹Excel并逆透视列生成指定格式DataFrame
原有代码故障原因
- 方法调用顺序错误:
melt是pandas DataFrame的实例方法,正确调用逻辑是读取得到的DataFrame对象.melt(),原代码写反了调用主体和参数 - 空列表调用方法报错:初始化的
df是空列表,不存在melt属性,每次循环都会触发异常,直接进入except分支打印空文件提示 - 缺少结果存储逻辑:就算melt执行成功,原代码也没有把处理结果追加到列表中,最终不会保留任何数据
- 后缀判断逻辑冗余:单独判断
.XLS后缀容易漏掉其他大小写变体的Excel文件
可直接运行的实现代码
import os import pandas as pd # 获取当前工作目录路径 mydir = os.getcwd() # 递归遍历目录下所有Excel文件 file_list = [] for path, _, files in os.walk(mydir): for file in files: # 统一转小写判断后缀,兼容所有大小写格式的Excel文件 if file.lower().endswith((".xlsx", ".xls")): file_list.append(os.path.join(path, file)) processed_df = [] for file_path in file_list: try: # 读取单个Excel文件 raw_df = pd.read_excel(file_path) # 逆透视打平为两列结构:第一列为原列名,第二列为对应单元格值 melt_res = raw_df.melt().dropna(how="all") processed_df.append(melt_res) print(f"已处理文件:{os.path.basename(file_path)}") except Exception as e: print(f"文件{os.path.basename(file_path)}处理失败,原因:{str(e)}") # 拼接所有文件的处理结果 final_result = pd.concat(processed_df, ignore_index=True) # 如需导出结果取消注释下一行即可 # final_result.to_excel("全量文件逆透视结果.xlsx", index=False)
实现说明
- 最终输出的
final_result默认两列:variable列存储原表所有列名,value列存储对应列下每一行的取值,和需求给出的目标结构完全一致 - 不需要提前对齐不同文件的列名、数据类型,所有异结构Excel都能自动打平
- 异常分支会打印具体错误信息,不会无差别提示空文件,方便排查损坏、格式异常的文件
- 自动跳过全空的无效行,减少冗余数据
内容的提问来源于stack exchange,提问作者Simon GIS
相关产品推荐
相关产品推荐

