如何在Python Pandas中为DataFrame添加路径中的区域及CSV文件名列
解决方案
可以用Python的pathlib(处理路径更直观)结合pandas来完成这个需求,步骤如下:
- 遍历所有目标CSV文件:用
pathlib.Path.glob()递归匹配符合路径格式的文件 - 解析路径提取关键信息:从文件路径中拆分出
region和CustomerName - 给每个DataFrame添加列后收集,最后合并
完整代码示例
import pandas as pd from pathlib import Path # 定义根目录 root_dir = Path("data-output") # 初始化空列表用于存储每个处理后的DataFrame df_list = [] # 遍历所有符合格式的CSV文件 for csv_path in root_dir.glob("**/*.csv"): # 从路径中提取region:路径结构是data-output/region/month/xxx.csv,取倒数第三部分 region = csv_path.parts[-3] # 提取CustomerName:取文件名(不含后缀) customer_name = csv_path.stem # 读取CSV文件 df = pd.read_csv(csv_path) # 添加新列 df["region"] = region df["CustomerName"] = customer_name # 将处理后的DataFrame加入列表 df_list.append(df) # 合并所有DataFrame final_df = pd.concat(df_list, ignore_index=True) # 可选:查看结果 print(final_df.head())
关键细节说明
pathlib.Path.glob("**/*.csv")会递归遍历data-output下所有子文件夹中的CSV文件,无需手动分层遍历csv_path.parts会把路径拆分成元组,比如data-output/EU/10/Filename1.csv的parts是('data-output', 'EU', '10', 'Filename1.csv'),parts[-3]正好对应regioncsv_path.stem直接获取文件名(不含.csv后缀),也就是需要的CustomerName
如果你的路径是绝对路径,parts[-3]依然有效,因为它是从路径末尾往前数第三部分,不受绝对/相对路径影响。
内容的提问来源于stack exchange,提问作者George C. Serban
相关产品推荐
相关产品推荐

