过滤数据框的 Pandas 直方图
Posted
技术标签:
【中文标题】过滤数据框的 Pandas 直方图【英文标题】:Pandas Histogram of Filtered Dataframe 【发布时间】:2014-04-24 21:10:22 【问题描述】:在过去的一个小时里,这一直让我发疯。使用时可以画直方图:
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))
某处是否存在语法错误?感谢您的帮助!
【问题讨论】:
考虑使用系列方法 hist 而不是...您正在使用的任何一个 (?)。我怀疑使用值会起作用,即df[df.TYPE=='SU4'].GVW.values
@AndyHayden 啊,同时发了。你应该把答案作为答案:-)
@AndyHayden 当我使用 values 属性时它确实有效。直觉上,我希望它可以在没有它的情况下工作。好吧,糟糕的直觉:)
@joris 哈哈!这更像是一个猜测而不是一个答案。 marillion:IMO 很奇怪/unpythonic, hist 关心这个并且不只是迭代它。
【参考方案1】:
也许可以尝试使用.values
属性(这会将数据作为numpy 数组返回),所以:
hist(df[df.TYPE=='SU4'].GVW.values, bins=50, range=(0,200))
我认为这不起作用的原因是 matplotlib hist
方法试图访问输入的第一个 0
-index 元素。但是因为 Series 使用它的整数索引作为标签而不是位置,这给切片 Series 带来了关键错误(因为第一个元素将不再有索引 0
)
确实,正如@AndyHayden 所说,您也可以使用 pandas hist
方法:
df[df.TYPE=='SU4'].GVW.hist(bins=50)
【讨论】:
终于在我的屏幕上看到了直方图 :) 是的,这行得通。不知道为什么没有.values
属性它不起作用。它适用于未屏蔽的df。奇怪...
添加了一个可能的原因,但不完全确定。因此,为了避免此类问题,有时最好使用 pandas 绘图方法,或使用 .values
属性。
这是一个关于原因的线程:github.com/matplotlib/matplotlib/issues/2775;称其为 matplotlib 与 pandas 的 API 不兼容
@Jeff 似乎这很容易解决 (try: x = x.values
) ?
它必须在 matplotlib 端完成,我有很多相当通用的建议,其中一个是使用 values 属性,最好是简单地检查一个 ndim 属性,这将适用于所有实际上不是子类的 ndarray-like【参考方案2】:
我在绘制使用查询导出的数据框时遇到了类似的问题。我发现如果在派生框架后我在派生框架上使用 reset_index() 函数,它就解决了问题。
【讨论】:
这对我也有帮助以上是关于过滤数据框的 Pandas 直方图的主要内容,如果未能解决你的问题,请参考以下文章
想要将 Pandas 数据框绘制为具有 log10 比例 x 轴的多个直方图
Python中Pandas/Matplotlib中直方图和密度的叠加
使用 matplotlib 和 pandas 从 csv 文件中绘制直方图