numpy中的"isnotnan"功能,这可以更加pythonic吗?

Dra*_*ric 59 python arrays numpy nan

我需要一个从数组中返回非NaN值的函数.目前我这样做:

>>> a = np.array([np.nan, 1, 2])
>>> a
array([ NaN,   1.,   2.])

>>> np.invert(np.isnan(a))
array([False,  True,  True], dtype=bool)

>>> a[np.invert(np.isnan(a))]
array([ 1.,  2.])
Run Code Online (Sandbox Code Playgroud)

Python:2.6.4 numpy:1.3.0

如果您有更好的方法,请分享,谢谢

Eze*_*ick 37

您目前正在测试任何非NaN的东西,而mtrw有正确的方法来执行此操作.如果您对测试有限数字感兴趣(不是NaN而不是INF)那么您不需要反演并且可以使用:

np.isfinite(a)
Run Code Online (Sandbox Code Playgroud)

更多pythonic和native,易读,通常当你想避免NaN时,你也想在我的经验中避免使用INF.

我以为我会把那些人扔给那些人.

  • 注意:如果你想使用isnotnan过滤pandas,这就是你要走的路. (3认同)
  • @philipKahn 嗯,看起来我确实犯了一个错误。我想象着 numpy 会在执行操作之前转换为 ndarray,因此不需要`.values` - 生活和学习! (2认同)