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

Pyplot调用scatter绘制散点图出现NameError与KeyError报错求助

错误原因

  1. 初始的NameError: name 'x' is not defined问题:plt.scatter(data[x],data[y])中的x/y没有加引号,Python会将其识别为变量而非列名字符串,你未定义这两个变量自然会报错。
  2. 后续的KeyError: 'x-coordinate'问题:生成CSV的代码逻辑顺序错误,你先导出了未转置的DataFrame,再执行转置操作,导致导出的CSV结构完全不符合预期:字段名变成了第一列的值,每一列才对应单条射门数据,所以读入后不存在x-coordinate这个列名。

解决方案

方案1:修正爬虫导出CSV的逻辑(推荐)

将爬虫代码末尾的三行代码调整为如下顺序:

col_names = ['Minute','Player','Situation','Team','xG','Result','x-coordinate','y-coordinate']
df = pd.DataFrame([minute,player,situation,team,xg,result,x,y], index=col_names)
df = df.T # 先转置,让每一行对应一条射门数据,列名对应col_names的字段
df.to_csv('shotmaps.csv', encoding='utf-8', index=False) # 新增index=False避免导出多余的索引列

重新运行爬虫生成新的CSV后,将可视化代码的散点图行修改为:

plt.scatter(data['x-coordinate'], data['y-coordinate'])

即可正常绘图。


方案2:直接适配已有错误CSV(无需重新爬取)

如果不想重新爬取数据,可在可视化代码读入CSV后新增结构修正逻辑:

data = pd.read_csv('shotmaps.csv')
# 新增以下三行修正表结构
data = data.T
data.columns = data.iloc[0] # 将第一行设为列名
data = data[1:].reset_index(drop=True) # 删除原字段名行

# 取列时需要手动转成数值类型
plt.scatter(data['x-coordinate'].astype(float), data['y-coordinate'].astype(float))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:36:02