小编典典

使用 str.contains 忽略 NaN

all

我想查找包含字符串的行,如下所示:

DF[DF.col.str.contains("foo")]

但是,这会失败,因为某些元素是 NaN:

ValueError:无法使用包含 NA / NaN 值的向量进行索引

所以我求助于混淆

DF[DF.col.notnull()][DF.col.dropna().str.contains("foo")]

有没有更好的办法?


阅读 78

收藏
2022-06-27

共1个答案

小编典典

有一个标志:

In [11]: df = pd.DataFrame([["foo1"], ["foo2"], ["bar"], [np.nan]], columns=['a'])

In [12]: df.a.str.contains("foo")
Out[12]:
0     True
1     True
2    False
3      NaN
Name: a, dtype: object

In [13]: df.a.str.contains("foo", na=False)
Out[13]:
0     True
1     True
2    False
3    False
Name: a, dtype: bool

请参阅str.replace文档:

na :默认 NaN,填充缺失值的值。


因此,您可以执行以下操作:

In [21]: df.loc[df.a.str.contains("foo", na=False)]
Out[21]:
      a
0  foo1
1  foo2
2022-06-27