在比较数组中的np.nan时,“less”中的值无效

时间:2016-11-06 18:10:26

标签: python pandas numpy

观察

np.nan < 0

False
np.array([np.nan]) < 0

array([False], dtype=bool)

然而

np.array([-1, np.nan]) < 0
//anaconda/envs/3.5/lib/python3.5/site-packages/ipykernel/__main__.py:1: RuntimeWarning: invalid value encountered in less
  if \__name\__ == '\__main\__':
array([ True, False], dtype=bool)

该错误意味着什么?

1 个答案:

答案 0 :(得分:4)

这只是一个警告,而不是例外。 Numpy尝试提供帮助,并报告您的数组中有nan。忽略它是安全的。如果警告本身困扰您(或您的用户),您可以压制它:

with np.errstate(invalid='ignore'):
    np.less([np.nan, 0], 1)

但是,实际上不推荐这样做,因为它可以掩盖不太明显的问题,如果你需要在冗长的计算中找到nan的来源,可以使调试更加困难。

请注意nan的语义:nan > 0nan < 0nan < nannan == nan都是False

另请注意,在numpy中(与熊猫不同)nan实际上意味着无效不可用