Pandas DataFrame “no numeric data to plot”错误

77

我有一个小的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由于其非常不平衡的值而产生了一个非常无聊的图形。但我想知道为什么错误消息抱怨没有数值数据可绘制。


5
如果您运行df.dtypes,您将看到什么数据类型? - chrisb
2
你的DataFrame可能包含数字字符串。看起来列没有被正确解析--你可能只有一个名为'2 3'的列。 为了帮助你修复这个问题,我们可能需要看一下df是如何定义的。 - unutbu
另外,看起来你可能有行向数据,而pandas期望列向数据,你可能需要转置。 - JohnE
4
df.info()可以提供每列的列名和数据类型。 - Alexander
4个回答

118
在绘图之前,请尝试以下操作:
df=df.astype(float)

在pandas背后有很多魔力,例如,当你使用pandas.read_csv来读取文件时。特别是,它必须推断数据类型。有时候它会弄错。上面的代码强制pandas尝试将数据转换为浮点数。

5
我希望这些解决方案能够提供说明。如果有人看到我的评论并完全理解了这个答案,请提供一个解释。 - Greg Hilston
12
@GregHilston,例如当你使用pandas.read_csv读取文件时,pandas背后有很多神奇的东西。特别是它必须推断数据类型,有时候会错。我上面的回答强制pandas尝试将数据转换为浮点数。 - alex314159
@EdekiOkoh 你好!是的,现在对我来说这似乎非常简单。当时,我刚开始使用Pandas,完全不理解发生了什么。现在我和你一样明白了,但是新手可能会像我曾经一样摸不着头脑。祝编码愉快! - Greg Hilston
1
我的数据在df中是字符串。我只想要一个表格。我还遇到了这个错误。有什么想法吗? - Charlie Parker

15

要解决这个问题,您需要将要使用的特定列或列转换为数字。首先,让我使用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

2
关于 pf.id=pd.to_numeric(pf.id),如果列标题有多个单词怎么办?例如,我有一个名为“Percent Working”的列。 - Kes Perron
1
@KesPerron 试试这个:pf ['百分比工作'] - Freddie
我的数据在df中是字符串。我只想要一个表格。我还遇到了这个错误。有什么想法吗? - Charlie Parker

8

受alex314159启发,如果您在同一张表中有除了浮点数以外的其他数据

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

1
我的数据在df中是字符串。我只想要一个表格。我还遇到了这个错误。有什么想法吗? - Charlie Parker

1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接