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

Pandas从1.5.3升级到2.1后df.sum()报KeyError问题求助

Pandas 1.5.3升级到2.1后value_counts().to_frame()列名变化导致KeyError的问题

问题原因

Pandas 2.0及以上版本对value_counts()方法的输出做了兼容性改动:

  • 在1.5.3版本中,df[col].value_counts()返回的Series的name属性是传入的col值,调用to_frame()后生成的DataFrame列名就是col;
  • 但在2.1版本中,value_counts()返回的Series的name默认变为固定的count,因此to_frame()生成的DataFrame列名变成了count,而非原来的col值。

这就导致你的table函数中table.rename(columns={col: "Total"})这一行找不到对应的列名,最终生成的DataFrame里没有"Total"列,执行df["Total"].sum()时触发KeyError。

解决办法

有三种可行的修复方式,任选其一即可:

方式1:修改rename的目标列名为count

直接适配新版本的列名规则,把重命名的键从col换成count:

def table(df,col):
    table = df[col].value_counts().to_frame()
    # 这里把col换成"count"
    table = table.rename(columns={"count": "Total"})
    table = table.reset_index()
    table = table.rename(columns={"index": "Type"})
    return table

方式2:调用value_counts时指定name参数

强制让value_counts()返回的Series保持旧版本的name属性,这样后续代码无需修改:

def table(df,col):
    # 指定name参数为col,保持和旧版本一致
    table = df[col].value_counts(name=col).to_frame()
    table = table.rename(columns={col: "Total"})
    table = table.reset_index()
    table = table.rename(columns={"index": "Type"})
    return table

方式3:不依赖具体列名,通过位置重命名

这种方式兼容新旧版本,不管列名是col还是count,直接取第一列重命名:

def table(df,col):
    table = df[col].value_counts().to_frame()
    # 取DataFrame的第一列进行重命名
    table = table.rename(columns={table.columns[0]: "Total"})
    table = table.reset_index()
    table = table.rename(columns={"index": "Type"})
    return table

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:35:54