pandas!='一个值'返回NaNs?

时间:2015-10-26 07:56:45

标签: python pandas comparison nan

我用的时候 x['test'] = df['a_variable'].str.contains('some string') 我明白了 -

True
NaN
NaN
True
NaN

如果我使用 x[x['test'] != True] 我应该收到值为NaN的行吗?

感谢。

2 个答案:

答案 0 :(得分:2)

是的,这是预期的行为:

In [3]:
df = pd.DataFrame({'some_string':['asdsa','some',np.NaN, 'string']})
df

Out[3]:
  some_string
0       asdsa
1        some
2         NaN
3      string

In [4]:
df['some_string'].str.contains('some')

Out[4]:
0    False
1     True
2      NaN
3    False
Name: some_string, dtype: object

使用以上作为面具:

In [13]:
df[df['some_string'].str.contains('some') != False]

Out[13]:
  some_string
1        some
2         NaN

所以上面是预期的行为。

如果使用na=value指定NaN值的值,则可以获得设置为返回值的任何值:

In [6]:
df['some_string'].str.contains('some', na=False)

Out[6]:
0    False
1     True
2    False
3    False
Name: some_string, dtype: bool

以上内容变得非常重要,因为使用NaN值进行索引会产生KeyError

答案 1 :(得分:1)

是的,我们希望它会发生

<强>例)

x=pd.DataFrame([True,NaN,True,NaN])
print x

    0
0   True
1   NaN
2   True
3   NaN

print x[x[0] != True]

    0
1   NaN
3   NaN

x[x[0] != True]会返回值不是True

的所有内容

Like wise

print x[x[0] != False]

    0
0   True
1   NaN
2   True
3   NaN

因为等式表示返回所有不是False

的值