pandas合并CSV文件时新增列存储数据来源文件名的实现方法
实现方案
首先确保你已经导入了所需依赖库:
import glob import pandas as pd import os
修改后的完整代码如下:
extension = 'csv' all_filenames = glob.glob(f'my_path/*.{extension}') df_collection = [] for file_path in all_filenames: # 读取单个CSV文件 current_df = pd.read_csv(file_path) # 新增File列,值为当前文件的纯文件名 current_df['File'] = os.path.basename(file_path) df_collection.append(current_df) # 合并所有文件 combined_csv = pd.concat(df_collection) # 导出合并结果,注意要指定具体文件名,不能只写文件夹路径 combined_csv.to_csv("my_path/combined_all.csv", index=False)
如果你偏好更简洁的写法,可以用assign方法直接在列表推导式中完成列新增,代码可以简化为:
extension = 'csv' all_filenames = glob.glob(f'my_path/*.{extension}') combined_csv = pd.concat([pd.read_csv(f).assign(File=os.path.basename(f)) for f in all_filenames]) combined_csv.to_csv("my_path/combined_all.csv", index=False)
注意点
- 如果不需要保留
.csv后缀,只需要文件名主体,可以将os.path.basename(file_path)替换为os.path.splitext(os.path.basename(file_path))[0] - 你原代码中
to_csv的参数只写了文件夹路径my_path,直接运行会触发报错,必须补充具体的导出文件名,如上文中的combined_all.csv
内容的提问来源于stack exchange,提问作者LdM
相关产品推荐
相关产品推荐

