忽略str.contains为的NaNs

2024-05-19 02:25:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

但是,这失败了,因为有些元素是NaN:

ValueError: cannot index with vector containing NA / NaN values

所以我求助于困惑

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

有更好的办法吗?


Tags: 字符串元素dfindexfoowithcolnan
3条回答

除上述答案外,我想说的是,对于没有单字名称的栏目,您可以使用:

df[df['Product ID'].str.contains("foo") == True]

希望这有帮助。

我并不是百分之百地解释原因(实际上是来这里寻找答案的),但这也有效,不需要替换所有的nan值。

import pandas as pd
import numpy as np

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

newdf = df.loc[df['a'].str.contains('foo') == True]

使用或不使用.loc

我不知道为什么这样做,因为我知道当你用方括号进行索引时,panda会将方括号内的内容作为TrueFalse进行求值。我不明白为什么把括号里的短语变成“额外布尔值”会有任何效果。

有一面旗子:

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

请参阅^{}文档:

na : default NaN, fill value for missing values.


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

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

相关问题 更多 >

    热门问题