You need to enable JavaScript to run this app. Pandas按指定列统计重复行计数时报KeyError: 'VIP_ID_SOURCE'错误
优惠活动
大模型
产品
解决方案
定价
更多

Pandas按指定列统计重复行计数时报KeyError: 'VIP_ID_SOURCE'错误

问题根因

触发KeyError的核心原因有两个:

  • 读取CSV时错误设置了header=None参数。你的测试CSV第一行本身就是标准列头行,设置这个参数后pandas会完全跳过第一行的列名解析逻辑,直接用0、1、2这类数字索引作为列名,此时DataFrame中根本不存在名为VIP_ID_SOURCE的列,自然触发索引报错。
  • 原代码的统计逻辑和“重复行计数求和”的预期存在偏差:duplicated(keep=False).sum()只能输出所有被标记为重复的行总条数,无法灵活匹配不同的重复统计需求。
修复步骤
  1. 修正CSV读取参数:移除header=None设置,让pandas自动将第一行识别为列名。

  2. 可根据实际统计需求选择对应代码片段:

    • 需求1:统计所有和重复值关联的行总条数(也就是同一个VIP_ID_SOURCE不管重复几次,所有相关行都计入总数)
      直接调整读取参数后的完整可运行代码:
    # -*- coding: utf-8 -*-
    import pandas as pd
    
    # 修正:移除header=None,自动识别第一行作为列名
    df = pd.read_csv("test.csv", delimiter='|')
    # 按VIP_ID_SOURCE标记所有重复关联的行,统计总条数
    dups_row_count = df.duplicated(subset=['VIP_ID_SOURCE'], keep=False).sum()
    print(f"重复关联的总行数:{dups_row_count}")
    

    针对你提供的测试样例,运行后会得到结果2——因为VIP_ID_SOURCE值为F08210020322的记录一共出现2次,全部被标记为重复行。

    • 需求2:统计重复带来的冗余行总数(也就是同一个VIP_ID_SOURCE出现n次,只把n-1次的重复冗余计入总和,用来衡量需要去重的行数)
      对应代码:
    # 按目标列分组统计出现次数,筛选出现次数大于1的组,计算重复冗余行数总和
    dup_redundancy = df.groupby('VIP_ID_SOURCE').size().loc[lambda s: s>1].apply(lambda x: x-1).sum()
    print(f"需要去重的冗余行总数:{dup_redundancy}")
    

    针对测试样例运行后会得到结果1,对应F08210020322重复1次的冗余量。

排错注意事项
  • 如果调整参数后仍然报列名不存在的错误,可以加一行print(df.columns)打印当前DataFrame的实际列名,排查是否存在列名前后带空格、编码不匹配、分隔符识别错误的问题。
  • 如果你的CSV本身确实没有列头,需要在read_csv时通过names参数手动传入列名列表,不能直接引用不存在的列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 11:45:10