Pyplot调用scatter绘制散点图出现NameError与KeyError报错求助
错误原因
- 初始的
NameError: name 'x' is not defined问题:plt.scatter(data[x],data[y])中的x/y没有加引号,Python会将其识别为变量而非列名字符串,你未定义这两个变量自然会报错。 - 后续的
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
相关产品推荐
相关产品推荐

