pandas DataFrame“没有要绘制的数字数据”错误

Posted

技术标签:

【中文标题】pandas DataFrame“没有要绘制的数字数据”错误【英文标题】:pandas DataFrame "no numeric data to plot" error 【发布时间】: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() 将为您提供每列的列和数据类型。 【参考方案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("[\$\,\.]", "")

【讨论】:

以上是关于pandas DataFrame“没有要绘制的数字数据”错误的主要内容,如果未能解决你的问题,请参考以下文章

pandas中dataframe索引排序实战:pandas中dataframe索引降序排序pandas中dataframe索引升序排序

pandas构建复合索引数据(multiple index dataframe)pandas索引复合索引dataframe数据

pandas.DataFrame.loc好慢,怎么遍历访问DataFrame比较快

将 Pandas Multiindexed DataFrame 与 Singleindexed Pandas DataFrame 合并

pandas.DataFrame.loc好慢,怎么遍历访问DataFrame比较快

python pandas dataframe 写入hdfs