Pandas批量melt多XLS文件时如何新增filename列存储源文件名
代码修改实现方案
核心修改逻辑:单文件完成melt转换后,新增filename列标记数据来源,拼接后调整列顺序即可满足输出要求,无需改动原有读取、melt的核心逻辑。
修改后完整代码
import pandas as pd import pathlib data = [] for file_path in pathlib.Path.cwd().iterdir(): if file_path.suffix.lower().startswith('.xls'): # 读取文件并执行长宽表转换 melted_df = pd.read_excel(file_path).melt() # 新增来源文件列,直接取无后缀的文件名 melted_df['filename'] = file_path.stem data.append(melted_df) # 拼接后按要求调整列顺序 df = pd.concat(data, ignore_index=True)[['filename', 'variable', 'value']]
关键改动说明
- 利用pathlib的
stem属性直接获取不含后缀的文件名,无需手动写字符串切割逻辑,可自动适配.xls/.xlsx后缀、大小写差异的场景 - 给每个单文件转换后的DataFrame追加filename列,保证每一行数据都能关联到对应的源文件
- 拼接完成后通过列选择调整顺序,最终输出列顺序严格匹配
filename/variable/value的要求,原有melt生成的variable、value字段取值完全不受影响
内容的提问来源于stack exchange,提问作者Simon GIS
相关产品推荐
相关产品推荐

