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】:要解决这个问题,您必须转换您想要的特定列或列
用于数字。首先让我用pandas
和numpy
创建一个简单的数据框到
更好地理解它。
#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 合并