我想查找包含字符串的行,如下所示:
DF[DF.col.str.contains("foo")]
但是,这会失败,因为某些元素是NaN:ValueError:无法使用包含NA / NaN值的向量进行索引所以我求助于模糊的
DF[DF.col.notnull()][DF.col.dropna().str.contains("foo")]
有更好的办法吗?
biswetbf1#
df[df.col.str.contains("foo").fillna(False)]
ecbunoof2#
我不是100%知道为什么(实际上是来这里寻找答案的),但这也是可行的,而且不需要替换所有的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来索引时,括号内的任何东西都被求值为True或False,我不知道为什么把括号内的短语写成“额外的布尔值”会有任何效果。
.loc
True
False
gcuhipw93#
您也可以使用query方法通过布尔表达式查询DataFrame的列,如下所示:
query
df.query('a.str.contains("foo", na=False)')
请注意,您可能不会获得性能改进,但它更具可读性(可以论证)。
sg24os4d4#
您还可以设置以下模式:
DF[DF.col.str.contains(pat = '(foo)', regex = True) ]
qyyhg6bp5#
有一个标志:
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,为缺失值填充值。因此,您可以执行以下操作:
str.replace
In [21]: df.loc[df.a.str.contains("foo", na=False)] Out[21]: a 0 foo1 1 foo2
9rnv2umw6#
除了以上的答案外,我想说的是,对于没有单个单词名称的栏目,您可以使用:
df[df['Product ID'].str.contains("foo") == True]
希望这个有用。
6条答案
按热度按时间biswetbf1#
ecbunoof2#
我不是100%知道为什么(实际上是来这里寻找答案的),但这也是可行的,而且不需要替换所有的nan值。
使用或不使用
.loc
均可。我不知道为什么会这样,因为我知道当你用括号panda来索引时,括号内的任何东西都被求值为
True
或False
,我不知道为什么把括号内的短语写成“额外的布尔值”会有任何效果。gcuhipw93#
您也可以使用
query
方法通过布尔表达式查询DataFrame的列,如下所示:请注意,您可能不会获得性能改进,但它更具可读性(可以论证)。
sg24os4d4#
您还可以设置以下模式:
qyyhg6bp5#
有一个标志:
请参阅
str.replace
文档:na:默认值NaN,为缺失值填充值。
因此,您可以执行以下操作:
9rnv2umw6#
除了以上的答案外,我想说的是,对于没有单个单词名称的栏目,您可以使用:
希望这个有用。