【问题标题】:pandas DataFrame "no numeric data to plot" errorpandas DataFrame“没有要绘制的数字数据”错误
【发布时间】:2015-10-08 07:10:45
【问题描述】:

我有一个小 DataFrame,我想使用 pandas 进行绘图。

    2   3
0   1300    1000
1   242751149   199446827
2   237712649   194704827
3   16.2    23.0

我仍在尝试从 pandas 中学习绘图。我想要一个情节在上面的例子中当我说。

df.plot()

我遇到了最奇怪的错误。

Library/Python/2.7/site-packages/pandas-0.16.2-py2.7-macosx-10.10-intel.egg/pandas/tools/plotting.pyc in _compute_plot_data(self)
   1015         if is_empty:
   1016             raise TypeError('Empty {0!r}: no numeric data to '
-> 1017                             'plot'.format(numeric_data.__class__.__name__))
   1018 
   1019         self.data = numeric_data

TypeError: Empty 'DataFrame': no numeric data to plot

虽然我知道具有非常不平衡的值的 DataFrame 会产生一个非常无趣的情节。我想知道为什么错误消息抱怨没有要绘制的数字数据。

【问题讨论】:

  • 运行df.dtypes会看到哪些数据类型?
  • 您的 DataFrame 可能包含数字字符串。看起来这些列没有被正确解析——您可能只有一个名为'2 3' 的列。为了帮助您解决此问题,我们可能需要查看 df 是如何定义的。
  • 另外,看起来你可能有面向行的数据,而 pandas 会期望面向列的数据,你可能想要转置。
  • df.info() 将为您提供每列的列和数据类型。

标签: python pandas matplotlib


【解决方案1】:

在绘图之前尝试以下操作:

df=df.astype(float)

【讨论】:

  • 我希望为此类解决方案提供解释。如果有人提出我的评论并完全理解这个答案,请提供解释。
  • @GregHilston Pandas 背后有很多魔法,例如当您使用 pandas.read_csv 读取文件时。特别是它必须推断数据类型。有时它会出错。我上面的回答迫使 pandas 尝试将数据转换为浮点数。
  • @EdekiOkoh 你好!是的,这对我来说似乎很直接。当时,我对 Pandas 还很陌生,完全不明白发生了什么。我现在和你在一起,但新来的人可能和我曾经一样。编码愉快!
  • 我在 df 中的数据是字符串。我只想要一张桌子。我也收到此错误。有什么想法吗?
【解决方案2】:

要解决这个问题,您必须转换您想要的特定列或列 用于数字。首先让我用pandasnumpy 创建一个简单的数据框到 更好地理解它。

#creating the dataframe

import pandas as pd
import numpy as np
details=[['kofi',30,'male',1.5],['ama',43,'female',2.5]]
pf=pd.DataFrame(np.array(details),[0,1],['name','age','sex','id'])

pf  #here i am calling the dataframe

   name age     sex   id
0  kofi  30    male  1.5
1   ama  43  female  2.5

#to make your plot work you need to convert the columns that have numbers into numeric
as seen below 

pf.id=pd.to_numeric(pf.id)
pf.age=pd.to_numeric(pf.age)

pf.plot.scatter(x='id',y='age')

#This should work perfectly

【讨论】:

  • 关于pf.id=pd.to_numeric(pf.id),如果列标题中有多个单词,你怎么办?例如,我有一个名为“工作百分比”的列。
  • @KesPerron 试试这个:pf['Percent Working']
  • 我在 df 中的数据是字符串。我只想要一张桌子。我也收到此错误。有什么想法吗?
【解决方案3】:

受alex314159启发,如果你在同一个表中还有其他数据而不是float

df["YourColumnNameHere"]=df["YourColumnNameHere"].astype(float)

【讨论】:

  • 我在 df 中的数据是字符串。我只想要一张桌子。我也收到此错误。有什么想法吗?
【解决方案4】:

使用以下方法将非数字数据转换为数字:

DataFrame["Column_name"] = DataFrame["Column_name"].str.replace("[\$\,\.]", "")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 2018-10-25
    相关资源
    最近更新 更多