【问题标题】:Pandas Histogram of Filtered Dataframe过滤数据框的 Pandas 直方图
【发布时间】: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 关心这个并且不只是迭代它。

标签: python matplotlib pandas histogram


【解决方案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() 函数,它就解决了问题。

【讨论】:

  • 这对我也有帮助
猜你喜欢
  • 2018-06-07
  • 1970-01-01
  • 2021-11-22
  • 2021-10-24
  • 2021-10-22
  • 2017-03-04
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多