初级开发者求助:使用Pandas匹配不同CSV中的inc_key值并为医疗数据文件追加对应列
嘿,这个需求用Pandas的merge方法就能轻松搞定,而且针对你提到的data2数据量超大的情况,我们还可以做一些优化来避免内存压力。下面是具体的实现步骤和注意事项:
实现步骤
1. 先搞定Pandas的导入与安装
如果你还没装Pandas,先在终端里跑pip install pandas完成安装,然后在代码里导入:import pandas as pd2. 读取两个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
相关产品推荐
相关产品推荐

