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

使用groupby创建函数的正确方法及KeyError: 'x'报错解决

问题分析与解决办法

错误根源

触发KeyError: 'x'的核心原因是分组列的传递错误:你在groupby(by=['x','y'])里写的'x'和'y'是固定字符串,程序会去DataFrame里找名叫'x'和'y'的列,但你的实际列名是通过函数参数x和y传入的,自然找不到对应列,抛出KeyError。另外seaborn.barplot的参数传递也不规范,容易引发其他问题。

修正后的完整函数

import seaborn as sns
import matplotlib.pyplot as plt

def find_corr(data, x, y):
    # 直接用函数参数x、y作为分组列,而非硬编码字符串
    corr = data.groupby(by=[x, y]).size()
    corr = corr.reset_index().rename(columns={0: 'count'}).sort_values('count', ascending=False)[:10]
    # 明确指定绘图参数名,避免位置参数顺序错误
    plot = sns.barplot(data=corr, x='count', y=y, hue=x, orient='h')
    plt.title(f'Correlation between {y} and {x}'.title(), fontsize=14, weight="bold")
    plt.xlabel(x.title(), fontsize=10, weight="bold")
    plt.ylabel(y.title(), fontsize=10, weight="bold")
    # 加上show()确保图表正常显示
    plt.show()

关键修正细节

  • 分组列传递修正:把['x','y']改成[x,y],这样程序会使用你调用函数时传入的实际列名,比如调用find_corr(df, 'gender', 'occupation')时,就会按gender和occupation两列分组。
  • 绘图参数规范:调用sns.barplot时明确写x='count',而不是直接放'count',Seaborn的位置参数顺序有严格要求,指定参数名能避免因顺序搞错导致的绘图异常。
  • 额外优化:添加plt.show(),在多数运行环境下,这能确保绘制的条形图正常弹出显示,不会出现“代码执行完但看不到图”的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:41:11