You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 13:45:31