【问题标题】:Plotting entire row of a dataframe绘制数据框的整行
【发布时间】:2021-12-24 20:33:22
【问题描述】:

我按照here 描述的答案根据行号绘制数据框。数据框如下所示:

print(df)

      Metric Value Metric Value Metric Value Metric Value

0             3            3            7            7
1             1            1            1            1
2             0            0            0            0
3             1            1            1            1
4           512          512          512          512
5          0.04         0.04         0.04         0.04

但是,下面的代码似乎是错误的

    row = df.iloc[4]
    row.plot(kind='bar')  # TypeError: no numeric data to plot
    plt.show()

print(row) 节目

Metric Value    512
Metric Value    512
Metric Value    512
Metric Value    512
Name: 4, dtype: object

我该如何解决这个问题?我希望看到 4 个条形图,所有条形图的 y 轴都是 512。

更新:

完整的错误是

TypeError                                 Traceback (most recent call last)
/tmp/ipykernel_512/3965164144.py in <module>
     58         row = df.iloc[4]
     59         print(row)
---> 60         row.plot(kind='bar')
     61         plt.tight_layout()
     62         plt.show()
/usr/local/lib/python3.8/dist-packages/pandas/plotting/_core.py in __call__(self, *args, **kwargs)
    970                     data.columns = label_name
    971 
--> 972         return plot_backend.plot(data, kind=kind, **kwargs)
    973 
    974     __call__.__doc__ = __doc__
/usr/local/lib/python3.8/dist-packages/pandas/plotting/_matplotlib/__init__.py in plot(data, kind, **kwargs)
     69             kwargs["ax"] = getattr(ax, "left_ax", ax)
     70     plot_obj = PLOT_CLASSES[kind](data, **kwargs)
---> 71     plot_obj.generate()
     72     plot_obj.draw()
     73     return plot_obj.result
/usr/local/lib/python3.8/dist-packages/pandas/plotting/_matplotlib/core.py in generate(self)
    284     def generate(self):
    285         self._args_adjust()
--> 286         self._compute_plot_data()
    287         self._setup_subplots()
    288         self._make_plot()
/usr/local/lib/python3.8/dist-packages/pandas/plotting/_matplotlib/core.py in _compute_plot_data(self)
    451         # no non-numeric frames or series allowed
    452         if is_empty:
--> 453             raise TypeError("no numeric data to plot")
    454 
    455         self.data = numeric_data.apply(self._convert_to_ndarray)
TypeError: no numeric data to plot

【问题讨论】:

  • 我更新了我的答案。请问您的 Pandas 版本是什么?
  • 根据print(pd.__version__),是1.3.3。
  • 下面的情节不是你想象的那样?
  • 是的,我想看看,但仍然得到同样的错误。我已经用完整的错误报告更新了帖子。
  • 试试row.astype(int).plot(kind='bar')

标签: python pandas plot


【解决方案1】:

更新

根据您的帖子编辑,您的数据似乎不是数字

Metric Value    512
Metric Value    512
Metric Value    512
Metric Value    512
Name: 4, dtype: object  # <- NOT NUMERIC

尝试将您的行(或您的数据框)转换为数字:

>>> df.dtypes
Metric Value    object
Metric Value    object
Metric Value    object
Metric Value    object
dtype: object

>>> df = df.astype(float)  # convert whole dataframe to float

>>> df.dtypes
Metric Value    float64
Metric Value    float64
Metric Value    float64
Metric Value    float64
dtype: object

即使所有列都具有相同的名称,您的代码似乎也可以工作:

row = df.iloc[4]
row.plot(kind='bar')  # TypeError: no numeric data to plot
plt.tight_layout()
plt.show()

【讨论】:

  • 我想它可能是在尝试将列名(而不是值)放在图中。所以,确实“度量值”不能用作y轴。
  • 如何将row 转换为普通数组,例如[512 512 512 512]?
  • row.to_numpy()row.values
  • 如果我使用plt.plot(row.values),我可以看到一个折线图。然后我将不得不使用 matplotlib 将其转换为条形图。我打算使用pandas.plot()
  • @mahmood。我更新了我的答案以修复 dtype 错误。
猜你喜欢
  • 2021-11-07
  • 2019-04-19
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多