在pandas中搜索数据框中的"不包含"

sti*_*tes 99 python contains pandas

我已经做了一些搜索,无法弄清楚如何过滤数据帧df["col"].str.contains(word),但是我想知道是否有办法做反向:按照该集合的赞美过滤数据帧.例如:对...的影响!(df["col"].str.contains(word)).

这可以通过一种DataFrame方法完成吗?

And*_*den 192

您可以使用invert(〜)运算符(其作用类似于布尔数据):

new_df = df[~df["col"].str.contains(word)]
Run Code Online (Sandbox Code Playgroud)

,new_dfRHS返回的副本在哪里.

contains也接受正则表达式...


如果上面抛出一个ValueError,原因很可能是因为你有混合数据类型,所以使用na=False:

new_df = df[~df["col"].str.contains(word, na=False)]
Run Code Online (Sandbox Code Playgroud)

要么,

new_df = df[df["col"].str.contains(word) == False]
Run Code Online (Sandbox Code Playgroud)

  • 也许一个完整的例子会有所帮助:`df [~df.col.str.contains(word)]`返回原始数据帧的副本,其中排除的行与该单词匹配. (5认同)

小智 39

我也遇到了not(〜)符号的问题,所以这是另一个来自另一个StackOverflow线程的方法:

df[df["col"].str.contains('this|that')==False]
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记,如果我们想要 rwmove 包含“|”的行 我们应该使用“\”,如`df = df[~df["col"].str.contains('\|')]` (2认同)

Nur*_*aaz 11

我希望答案已经发布

我正在添加框架以查找多个单词并从 dataFrame 中否定这些单词

这里'word1','word2','word3','word4'= 要搜索的模式列表

df = 数据帧

column_a = 来自 DataFrame df 的列名

Search_for_These_values = ['word1','word2','word3','word4'] 

pattern = '|'.join(Search_for_These_values)

result = df.loc[~(df['column_a'].str.contains(pattern, case=False)]
Run Code Online (Sandbox Code Playgroud)


Ara*_*ash 7

您可以使用Apply和Lambda选择列中包含列表中任何内容的行。对于您的方案:

df[df["col"].apply(lambda x:x not in [word1,word2,word3])]
Run Code Online (Sandbox Code Playgroud)


Sho*_*esh 6

在使用上面Andy推荐的命令之前,我必须删除NULL值.一个例子:

df = pd.DataFrame(index = [0, 1, 2], columns=['first', 'second', 'third'])
df.ix[:, 'first'] = 'myword'
df.ix[0, 'second'] = 'myword'
df.ix[2, 'second'] = 'myword'
df.ix[1, 'third'] = 'myword'
df

    first   second  third
0   myword  myword   NaN
1   myword  NaN      myword 
2   myword  myword   NaN
Run Code Online (Sandbox Code Playgroud)

现在运行命令:

~df["second"].str.contains(word)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

TypeError: bad operand type for unary ~: 'float'
Run Code Online (Sandbox Code Playgroud)

我首先使用dropna()或fillna()删除了NULL值,并且没有问题地重试命令.

  • 您还可以使用 `~df["second"].astype(str).str.contains(word)` 强制转换为 `str`。请参阅/sf/ask/3049813231/ (2认同)

rac*_*hwa 6

要否定您的查询,请使用~. 使用的query优点是df直接返回有效观察结果:

df.query('~col.str.contains("word").values')
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

90209 次

最近记录:

6 年,7 月 前