pandas绘制DataFrame条形图报错no numeric data to plot
报错原因
pandas的DataFrame.plot()方法中,针对条形图(含垂直条形bar、水平条形barh)的参数映射逻辑和画布坐标轴方向无关,规则固定:
x参数接收分类维度列,用于区分不同的条形,支持字符串、分类、时间等非数值类型y参数接收数值度量列,用于计算条形的长度/高度,必须为可识别的数值类型
原代码错误将数值列Percent传给x参数,将字符串类型的分类列State传给y参数,pandas从y指定的列中提取不到有效绘图数值,因此抛出TypeError: no numeric data to plot报错。
修复方法
核心修改是调换plot()方法中x和y的传参,将分类列传给x、数值列传给y即可,水平方向的条形展示由kind='barh'参数自动控制,无需手动匹配画布坐标轴。修正后的可运行代码如下:
import pandas as pd import matplotlib.pyplot as plt # 构造测试数据集 df_prevalence = pd.DataFrame({'Percent': [3.41, 3.49, 3.68, 3.72, 3.87], 'State': ['New Jersey', 'Florida', 'New York', 'Texas', 'Illinois ']}) # 绘制水平条形图 df_prevalence.plot( kind='barh', x='State', y='Percent', figsize=(15, 12), color='r', title='Adults with Serious Thoughts of Suicide in the Unites States by State, 2020' ) plt.xlabel('Prevalence (%)') plt.ylabel('State') plt.show()
补充排查点:如果调换参数后仍出现同类报错,说明
Percent列可能被识别为字符串类型(常见于原始数据带多余符号、空格的场景),可在绘图前执行以下代码强制转换列类型:df_prevalence['Percent'] = pd.to_numeric(df_prevalence['Percent'], errors='coerce')
内容的提问来源于stack exchange,提问作者Liv Matthews
相关产品推荐
相关产品推荐

