解决TypeError: Empty 'DataFrame'无数值数据绘图错误及字符串绘图疑问
解决DataFrame绘图报错:TypeError: Empty 'DataFrame': no numeric data to plot
嘿,我来帮你搞定这个问题!你遇到的报错根源其实不是“字符串不能做图表的x轴”——恰恰相反,城市名称这类字符串完全可以作为折线图的x轴,问题出在你代码里的几个细节上:
问题1:全角中文引号导致DataFrame构造异常
你的代码里用了中文全角引号(比如‘Jakarta’、‘Staff’),而Python只认半角的单/双引号('Jakarta'、'Staff')。这种错误会让Pandas无法正确识别列名和数据,最终构造出的DataFrame可能是残缺的,自然找不到可绘图的数值数据。
问题2:转数值操作可能未生效
你添加的df.Staff=pd.to_numeric(df.Staff)之所以没起作用,也是因为第一步的引号错误——原DataFrame的Staff列可能根本没被正确创建,或者里面的字符串因为中文引号的问题无法被转成数值。
正确的代码示例
把所有中文引号替换成半角引号,再确保Staff列转为数值类型,就能正常绘图了:
import pandas as pd import matplotlib.pyplot as plt # 注意所有引号都是半角的 df = pd.DataFrame({ 'City': ['London', 'Jakarta', 'Newyork', 'Mumbai'], 'Staff': ['1000','2000','3000','4000'] }) print(df.head()) # 转为数值类型 df['Staff'] = pd.to_numeric(df['Staff']) # 绘制折线图,字符串类型的City可以直接作为x轴 df.plot(kind='line', x='City', y='Staff', color='red') plt.show()
额外说明
你提到的单独定义x、y列表的方式也能行,但完全没必要——只要DataFrame构造正确,直接用DataFrame的plot方法更简洁。字符串作为x轴是完全支持的,Pandas会自动把它们当作分类变量处理。
内容的提问来源于stack exchange,提问作者ADS KUL




