2014-03-18 137 views
7

这一直使我疯狂的最后一个小时。我可以得出一个柱状图,当我使用:熊猫滤波数据帧直方图

hist(df.GVW, bins=50, range=(0,200)) 

我用下面的时候我需要过滤数据框对于给定条件的一列,例如:

df[df.TYPE=='SU4'] 

到目前为止,一切正常。当我尝试获取此过滤数据的直方图时,出现一个关键错误:KeyError: 0L。我使用以下的过滤数据直方图:

hist(df[df.TYPE=='SU4'].GVW, bins=50, range=(0,200)) 

是否有语法错误的地方?谢谢您的帮助!

+1

考虑使用系列方法hist而不是...无论使用哪一个(?)。我怀疑使用值将工作,即'df [df.TYPE =='SU4']。GVW.values' –

+0

@AndyHayden啊,同时发布它。你应该把答案作为答案:-) – joris

+0

@AndyHayden它在我使用values属性时工作。尽管如此,我希望它没有这个工作。那么,不好inisition :) – marillion

回答

10

也许尝试使用.values属性(该返回数据作为numpy的阵列),所以:

hist(df[df.TYPE=='SU4'].GVW.values, bins=50, range=(0,200)) 

我认为这不工作的原因是因为matplotlib hist方法试图访问第一0 - 输入的索引元素。但由于该系列产品采用了整数索引标签,而不是位置,这给出了一个切片系列的一个关键错误(如第一个元素不会有指数0了)


事实上,作为@AndyHayden说,你也可以使用熊猫hist方法:

df[df.TYPE=='SU4'].GVW.hist(bins=50) 
+0

终于看到我的屏幕上的直方图:)是的,这个工程。不知道为什么它没有'.values'属性不起作用。它适用于未被屏蔽的df。奇怪...... – marillion

+0

增加了一个可能的原因,但不完全确定。出于这个原因,为了避免这种问题,有时可能会更好或使用熊猫绘图方法,或使用'.values'属性。 – joris

+0

这是关于原因的一个线索:https://github.com/matplotlib/matplotlib/issues/2775;将它称为matplotlib与pandas的API不兼容性 – Jeff

4

我有一个类似的问题,绘制数据帧我使用查询得到。我发现如果在派生框架之后,我在派生的框架上使用了reset_index()函数,它解决了问题。

+0

这就是它,谢谢! –

+0

这帮助了我 – StationaryTraveller