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

如何通过公共id字段合并文件夹下所有CSV文件并生成目标嵌套字典

问题描述

我有一个存储了多个.csv文件的目录,示例文件如下:
a.csv

id,name
1,john
2,mary
3,alex

b.csv

id,birth
1,01.01.2001
2,05.06.1990

c.csv

id,death
2,01.02.2020
1,-

最终需要得到一个字典,键为int类型的id,值为包含该id跨所有文件的所有字段取值的嵌套字典,预期结构如下:

{
        1: {"id": 1, "name": "john", "birth": "01.01.2001", "death": "-"},
        2: {"id": 2, "name": "mary", "birth": "05.06.1990",
            "death": "01.02.2020"},
        3: {"id": 3, "name": "alex", "birth": None, "death": None},
}

我目前尝试用如下代码将所有文件合并为一个dataframe:

from pathlib import Path
import os
import pandas as pd

files = Path(r'path').rglob('*.csv')

# read in all the csv files
all_csvs = [pd.read_csv(file) for file in files]

# lump into one table
all_csvs = pd.concat(all_csvs, axis=1)

但执行后得到的dataframe中'id'字段重复出现了三列,不符合预期,请问该如何实现需求?


问题原因

你使用pd.concat(all_csvs, axis=1)是直接横向堆叠所有DataFrame,不会自动匹配不同表的id值,所以会出现多列重复的id字段。

实现代码

读取每个csv时先将id设为索引,再做横向拼接,pandas会自动按索引(也就是id值)对齐数据,后续处理完缺失值后转成指定格式的字典即可:

from pathlib import Path
import pandas as pd

files = Path(r'path').rglob('*.csv')

# 读取每个csv并将id设为索引
all_csvs = []
for file in files:
    df = pd.read_csv(file)
    df = df.set_index('id')
    all_csvs.append(df)

# 按索引(id)横向拼接所有表
merged_df = pd.concat(all_csvs, axis=1)
# 重置索引,把id变回普通列
merged_df = merged_df.reset_index()
# 所有空值统一转成None
merged_df = merged_df.fillna(value=None)
# 确保id为int类型
merged_df['id'] = merged_df['id'].astype(int)

# 直接转成要求格式的字典
result = merged_df.set_index('id').to_dict('index')

执行后result就是完全符合预期结构的字典。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:45:00