合并多CSV文件用于预测时触发TypeError,求排查解决
问题分析与解决方案
核心问题
pd.merge()的参数限制:pandas.merge()仅支持合并两个DataFrame(对应left和right参数),你一次性传入多个DataFrame(d1、d2、d3、d4、d5、d6),导致参数解析混乱,触发TypeError。- 未定义变量d5:代码中引用了
d5,但没有读取对应的CSV文件,属于无效引用。
正确的合并方式
方式1:链式逐步合并
依次两两合并DataFrame,逻辑清晰易调试:
import pandas as pd # 读取所有存在的CSV文件(移除未定义的d5,或补充对应读取代码) d1 = pd.read_csv('/content/drive/My Drive/mimic_ed/addmition.csv') d2 = pd.read_csv('/content/drive/My Drive/mimic_ed/diagnosis.csv') d3 = pd.read_csv('/content/drive/My Drive/mimic_ed/icu.csv') d4 = pd.read_csv('/content/drive/My Drive/mimic_ed/med.csv') d6 = pd.read_csv('/content/drive/My Drive/mimic_ed/vitalsign.csv') # 链式合并每个DataFrame merged_df = d1.merge(d2, on='patient_id', how='outer') merged_df = merged_df.merge(d3, on='patient_id', how='outer') merged_df = merged_df.merge(d4, on='patient_id', how='outer') merged_df = merged_df.merge(d6, on='patient_id', how='outer') print(merged_df)
方式2:用functools.reduce批量合并
适合合并大量DataFrame的场景,代码更简洁:
import pandas as pd from functools import reduce # 将所有需要合并的DataFrame存入列表 dfs = [ pd.read_csv('/content/drive/My Drive/mimic_ed/addmition.csv'), pd.read_csv('/content/drive/My Drive/mimic_ed/diagnosis.csv'), pd.read_csv('/content/drive/My Drive/mimic_ed/icu.csv'), pd.read_csv('/content/drive/My Drive/mimic_ed/med.csv'), pd.read_csv('/content/drive/My Drive/mimic_ed/vitalsign.csv') ] # 批量合并所有DataFrame merged_df = reduce(lambda left, right: pd.merge(left, right, on='patient_id', how='outer'), dfs) print(merged_df)
额外注意事项
- 确认所有CSV文件中都存在
patient_id列,否则会触发KeyError。 - 如果
d5是遗漏的文件,补充对应的pd.read_csv代码;如果是笔误,直接从合并列表中删除即可。
内容的提问来源于stack exchange,提问作者Shrouq Alzhrani
相关产品推荐
相关产品推荐

