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

Pandas读取CSV执行GroupBy行计数时报KeyError: 'Occupation'的问题

问题根因与修复方案

触发KeyError的核心原因

你打印输出的DataFrame列名实际携带首尾单引号:读入CSV时,pandas没有自动将单引号识别为字段包裹符,把单引号算进了列名内容里,此时真实列名是"'Occupation'"、"'data'",你代码里写的不带单引号的Occupation列根本不存在,因此groupby阶段直接抛出KeyError。
另外你之前的代码还有一个逻辑漏洞:df[['data']].groupby(['Occupation'])的写法是先筛出仅包含data列的子表,这个子表本身不包含Occupation列,就算解决了引号问题,这种写法也会触发列找不到的错误。

修复步骤

  1. 读取CSV时增加quotechar参数,告诉pandas用单引号作为字段的包裹标识,自动清除列名、字段值前后的多余单引号:
    df = pd.read_csv(filename, quotechar="'")
    
    执行完可以打印df.columns验证,此时列名就是不带引号的Occupation、data,和代码里写的列名匹配。
  2. 调整groupby的写法,保证分组列在操作的DataFrame范围内,统计每个Occupation对应的行数可以直接写:
    # 按Occupation分组,统计每组的行数,结果直接赋值给df_stats即可存储
    df_stats = df.groupby('Occupation', as_index=False)['data'].count()
    
    如果习惯用agg写法,也可以直接指定聚合后的列名,避免生成多级结构的复杂列名:
    df_stats = df.groupby('Occupation').agg(row_count=('data', 'count'))
    

常见疑问解答

  • 如何存储分组统计的计数结果:聚合完成的结果直接通过等号赋值给自定义变量即可,后续可以对这个变量做重命名、导出、筛选等任意操作。
  • groupby和agg返回结果的属性:经过groupby分组、agg聚合后返回的结果是完全独立的对象(如果只统计单列计数且不指定as_index=False,返回带分组索引的Series;指定as_index=False或做多列聚合时返回结构完整的DataFrame),和原始DataFrame没有内存层面的引用关联,修改聚合结果不会反向影响原始表数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 06:45:05