我用的时候
x['test'] = df['a_variable'].str.contains('some string')
我明白了 -
True
NaN
NaN
True
NaN
如果我使用
x[x['test'] != True]
我应该收到值为NaN的行吗?
感谢。
答案 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