如何从CSV文件名提取字符添加至DataFrame列名并合并数据
解决方案:给CSV列名添加来源标识并整理数据
我来帮你搞定这个需求!我们需要从文件名里提取关键标识,给每个DataFrame的非ID列加上来源后缀,这样既能区分数据来源,又能方便后续基于ID合并数据。下面是修改后的完整代码和详细说明:
核心步骤拆解
- 解析文件名:从
aa_bbb_2009_10这类命名里,提取出aa_10这种关键标识,用来标记列名来源 - 重命名列名:保留
ID列不变,其他列统一加上_{标识}的后缀 - 统一存储数据:用字典存储处理后的DataFrame,方便后续调用或合并操作
修改后的完整代码
import glob import os import pandas as pd path = ".../folder/" all_files = glob.glob(os.path.join(path, "*.csv")) # 用字典存储处理后的DataFrame,键为来源标识,方便后续查找调用 processed_dfs = {} for file in all_files: # 获取不带后缀的纯文件名 file_name = os.path.splitext(os.path.basename(file))[0] # 分割文件名成列表:比如aa_bbb_2009_10 -> ['aa', 'bbb', '2009', '10'] name_parts = file_name.split('_') # 组合我们需要的来源标识:第一个前缀 + 最后一个数字部分 source_tag = f"{name_parts[0]}_{name_parts[3]}" # 读取CSV文件 dfn = pd.read_csv(file) # 批量重命名列名:ID列保持不变,其他列加上来源标识后缀 new_columns = { col: f"{col}_{source_tag}" if col != 'ID' else col for col in dfn.columns } dfn = dfn.rename(columns=new_columns) # 将处理好的DataFrame存入字典 processed_dfs[source_tag] = dfn # 如果你需要单独取出指定的DataFrame,直接从字典里提取即可 df1 = processed_dfs['aa_10'] df2 = processed_dfs['aa_100'] df3 = processed_dfs['xx_10'] df4 = processed_dfs['xx_100'] # 后续如果需要基于ID合并所有数据,可以用链式merge操作 merged_df = df1.merge(df2, on='ID').merge(df3, on='ID').merge(df4, on='ID')
关键细节说明
- 文件名解析逻辑:针对你给出的
前缀_bbb_年份_数字命名格式,我们取第1段前缀(aa/xx)和最后一段数字(10/100)组合成标识,完全匹配你的需求。 - 列名重命名:用字典推导式快速生成新列名,确保
ID列作为合并键保持不变,其他列都带上清晰的来源标记,比如v1变成v1_aa_10。 - 字典存储优势:相比单独命名
df1-df4,字典存储更灵活,后续新增同格式的CSV文件时,代码不需要额外修改就能自动处理。
这样处理后,每个DataFrame的列名都会清晰显示数据来源,后续的合并操作也能轻松基于ID完成啦!
内容的提问来源于stack exchange,提问作者Yolo_chicken
相关产品推荐
相关产品推荐

