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

初级开发者求助:使用Pandas匹配不同CSV中的inc_key值并为医疗数据文件追加对应列

嘿,这个需求用Pandas的merge方法就能轻松搞定,而且针对你提到的data2数据量超大的情况,我们还可以做一些优化来避免内存压力。下面是具体的实现步骤和注意事项:

实现步骤
  • 1. 先搞定Pandas的导入与安装
    如果你还没装Pandas,先在终端里跑pip install pandas完成安装,然后在代码里导入:

    import pandas as pd
    
  • 2. 读取两个CSV文件(重点优化内存)
    因为data2有几百万行,直接全量加载可能占内存,建议给inc_key指定字符串类型(毕竟ID不需要数值计算),如果不需要data2的所有列,还可以用usecols只加载需要的列,进一步节省内存:

    # 读取data1,把inc_key设为字符串类型避免类型转换问题
    data1 = pd.read_csv('data1.csv', dtype={'inc_key': str})
    
    # 读取data2,同样指定inc_key类型;如果只需要某些列,比如['inc_key', 'patient_age', 'diagnosis'],就用usecols指定
    data2 = pd.read_csv('data2.csv', dtype={'inc_key': str})
    
  • 3. 基于inc_key完成左连接合并
    你需要保留data1的所有行,只把data2中匹配到的记录追加为列,所以用左连接(how='left')就正好符合需求:

    # 以inc_key为匹配键,左连接合并两个数据集
    merged_data = pd.merge(data1, data2, on='inc_key', how='left')
    

    简单解释参数:

    • on='inc_key':明确告诉Pandas用哪一列做匹配依据
    • how='left':保留左边data1的所有行,data2中没匹配到的对应列会显示NaN(空值)
  • 4. 处理data2中可能的重复记录
    要是data2里同一个inc_key对应多行数据,合并后会产生重复行,建议先检查再处理:

    # 检查data2中是否有重复的inc_key
    duplicate_keys = data2[data2.duplicated('inc_key', keep=False)]
    if not duplicate_keys.empty:
        print("注意:data2中存在重复的inc_key记录,如下:")
        print(duplicate_keys)
    
    # 比如选择保留每个inc_key的第一条记录,去重后再合并
    data2_deduped = data2.drop_duplicates('inc_key', keep='first')
    merged_data = pd.merge(data1, data2_deduped, on='inc_key', how='left')
    
  • 5. 保存合并后的结果
    最后把合并好的数据导出成新的CSV,记得加index=False避免生成无用的索引列:

    merged_data.to_csv('merged_medical_data.csv', index=False)
    
针对超大data2的内存优化方案

如果你的机器内存不够一次性加载data2,可以用分块读取的方式逐步合并:

# 分块读取data2,每次处理1万行(可根据内存情况调整chunksize)
chunks = pd.read_csv('data2.csv', dtype={'inc_key': str}, chunksize=10000)
merged_data = data1.copy()

for chunk in chunks:
    # 每次合并一块数据
    merged_data = pd.merge(merged_data, chunk, on='inc_key', how='left')
    # 移除重复列(分块合并可能会出现_x/_y后缀的重复列,保留第一次出现的即可)
    merged_data = merged_data.loc[:, ~merged_data.columns.duplicated()]

merged_data.to_csv('merged_medical_data.csv', index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:53:09