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

如何使用for循环按文件名中的年份、国家批量匹配合并CSV文件

批量匹配合并同名年份国家CSV文件的Python实现

以下是可直接复用的实现逻辑,适配你提供的文件命名规则:

实现步骤

首先导入依赖库:

import os
import pandas as pd

1. 初始化配置与存储容器

# 替换为你本地存储CSV文件的文件夹实际路径
csv_folder_path = "你的CSV文件夹路径"
# 存储第一类文件(University/Education开头):键为(年份, 国家),值为文件路径
type1_file_map = {}
# 存储第二类文件(Results开头):键为(年份, 国家),值为文件路径
type2_file_map = {}
# 存储所有合并后的数据集,可按需后续统一导出或拼接
merged_result = []

2. 遍历文件完成分类归集

for file_name in os.listdir(csv_folder_path):
    # 跳过非CSV文件
    if not file_name.endswith(".csv"):
        continue
    # 拆分文件名与后缀,按下划线切割命名片段
    name_without_suffix = file_name.rsplit(".", 1)[0]
    name_segments = name_without_suffix.split("_")
    # 过滤不符合「前缀_年份_国家」命名规则的文件
    if len(name_segments) != 3:
        print(f"跳过不符合规则的文件:{file_name}")
        continue
    prefix, year, country = name_segments
    full_file_path = os.path.join(csv_folder_path, file_name)
    # 按前缀分类存入对应字典
    if prefix in ("University", "Education"):
        type1_file_map[(year, country)] = full_file_path
    elif prefix == "Results":
        type2_file_map[(year, country)] = full_file_path

3. 批量匹配合并

for (year, country), type1_path in type1_file_map.items():
    # 仅两类文件都存在时才执行合并
    if (year, country) not in type2_file_map:
        print(f"缺失年份{year}、国家{country}的Results类文件,跳过合并")
        continue
    type2_path = type2_file_map[(year, country)]
    # 读取两类文件
    df_type1 = pd.read_csv(type1_path)
    df_type2 = pd.read_csv(type2_path)
    # 按指定字段合并
    merged_df = pd.merge(df_type1, df_type2, on=['year','country','region','sociodemographics'])
    # 可选配置1:单独导出每个合并后的文件,取消注释即可生效
    # merged_df.to_csv(f"./merged_output/merged_{year}_{country}.csv", index=False, encoding="utf-8-sig")
    merged_result.append(merged_df)

# 可选配置2:将所有合并结果拼接为一个总表导出,取消注释即可生效
# total_merged_df = pd.concat(merged_result, ignore_index=True)
# total_merged_df.to_csv("total_merged_result.csv", index=False, encoding="utf-8-sig")

注意事项

  • 若第一类文件还有其他前缀,可自行修改if prefix in ("University", "Education")中的元组内容
  • 合并默认是内连接,若需要保留某侧全部数据可添加how参数,例:pd.merge(df_type1, df_type2, on=xxx, how="left")
  • 若合并后出现带_x/_y后缀的列,说明两类文件除了on指定的公共列外还有其他重名列,可添加suffixes=("_类1", "_类2")参数自定义后缀

内容的提问来源于stack exchange,提问作者panino00

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:45:00