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

合并7个CSV文件时触发KeyError: 'record_id'问题求助

解决KeyError: 'record_id'并合并多个CSV文件的方案

嘿,我来帮你搞定这个问题!你遇到的KeyError: 'record_id'其实是因为代码里读取CSV的方式错了——你把文件路径传给了io.StringIO(),但StringIO是用来处理字符串内容的,不是文件路径。这就导致pd.read_csv根本没读到真实的CSV数据,而是把路径字符串当成了CSV内容,自然找不到record_id列啦。

第一步:修正两个文件的合并代码

先把读取文件的方式改对,直接用文件路径传给pd.read_csv就行,不需要StringIO。这里给你修正后的代码:

import pandas as pd
import os

# 定义两个文件的路径
f0 = r'C:\PythonWorking\xxxData\SYLK_fix\FeMRExportDataFile0.csv'
f1 = r'C:\PythonWorking\xxxData\SYLK_fix\FeMRExportDataFile1.csv'

# 直接读取CSV文件(这才是正确的打开方式!)
data_0 = pd.read_csv(f0)
data_1 = pd.read_csv(f1)

# 先检查两个文件是否都包含'record_id'列,提前规避错误
if 'record_id' not in data_0.columns or 'record_id' not in data_1.columns:
    raise ValueError("其中一个CSV文件缺少'record_id'列,请检查文件内容!")

# 基于record_id执行outer合并(如果要左连接就把how改成'left')
merged_df = pd.merge(data_0, data_1, on='record_id', how='outer')

# 保存结果,index=False避免生成多余的索引列
final_csv = r'C:\PythonWorking\xxxData\SYLK_fix\FeMRExportDataFile0_6Merged.csv'
merged_df.to_csv(final_csv, index=False)

第二步:扩展到7个文件的批量合并

既然你要合并7个文件,手动写7次合并太麻烦了,用循环批量处理更高效。下面是适配7个文件的代码,还加了错误检查,避免某个文件缺列导致整个程序崩溃:

import pandas as pd
import os

# 定义文件夹路径和文件前缀
folder_path = r'C:\PythonWorking\xxxData\SYLK_fix'
file_prefix = 'FeMRExportDataFile'
total_files = 7  # 从0到6共7个文件

# 先读取第一个文件作为合并的基础
merged_df = pd.read_csv(os.path.join(folder_path, f'{file_prefix}0.csv'))

# 检查基础文件是否有record_id
if 'record_id' not in merged_df.columns:
    raise ValueError("第一个CSV文件缺少'record_id'列,请先检查!")

# 循环合并剩下的6个文件
for file_num in range(1, total_files):
    current_file = os.path.join(folder_path, f'{file_prefix}{file_num}.csv')
    current_df = pd.read_csv(current_file)
    
    # 检查当前文件是否有record_id,没有就跳过并提示
    if 'record_id' not in current_df.columns:
        print(f"⚠️ 警告:文件{current_file}缺少'record_id'列,已跳过该文件!")
        continue
    
    # 执行outer合并(如果需要左连接就改成how='left')
    merged_df = pd.merge(merged_df, current_df, on='record_id', how='outer')

# 保存最终合并结果
final_output = os.path.join(folder_path, 'FeMRExportDataFile0_6Merged.csv')
merged_df.to_csv(final_output, index=False)

print("🎉 合并完成!最终文件已保存到指定路径。")

一些额外的小提示

  • 如果你的CSV文件有特殊分隔符(比如制表符),可以在pd.read_csv里加sep='\t'参数调整
  • 如果遇到编码问题(比如中文乱码),试试encoding='utf-8-sig'或者encoding='gbk'
  • 如果需要保留所有record_id(不管哪个文件里的),就用how='outer';如果只想保留第一个文件里的record_id,就用how='left'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:28:38