pandas取DataFrame指定行绘制柱状图报无数值数据如何解决
问题原因
你提取出的行对应的Series数据类型为object,虽然打印结果显示为512这类数值形式,但实际存储为字符串类型,pandas绘图模块无法将其识别为可绘制的数值数据,因此抛出TypeError: no numeric data to plot错误。
修复方案
有两种常用修复方式,可根据使用场景选择:
- 临时转换当前待绘制行的数据类型,无需修改原始DataFrame:
import pandas as pd import matplotlib.pyplot as plt row = df.iloc[4] # 将Series转换为数值类型,errors='coerce'参数可将无法转换的异常值自动设为NaN,避免转换报错 row_numeric = pd.to_numeric(row, errors='coerce') row_numeric.plot(kind='bar') plt.tight_layout() plt.show()
- 全局转换整个DataFrame的列数据类型,后续所有行操作都无需重复转换:
import pandas as pd import matplotlib.pyplot as plt # 对DataFrame所有列执行数值转换 df = df.apply(pd.to_numeric, axis=0, errors='coerce') # 后续直接正常取行绘图即可 row = df.iloc[4] row.plot(kind='bar') plt.tight_layout() plt.show()
如果转换过程中出现非预期的NaN值,可检查原始DataFrame中是否混入了空字符串、特殊符号等非数值内容,排查后再执行转换即可。
内容的提问来源于stack exchange,提问作者mahmood
相关产品推荐
相关产品推荐

