Python 搜寻「;不包含“;关于熊猫的数据帧

Python 搜寻「;不包含“;关于熊猫的数据帧,python,pandas,contains,Python,Pandas,Contains,我做了一些搜索,不知道如何通过df[“col”]过滤数据帧。str.contains(word),但是我想知道是否有一种方法可以做相反的事情:通过该集合的补充过滤数据帧。例如:为了的效果!(df[“col”].str.contains(word)) 这可以通过DataFrame方法实现吗?您可以使用反转(~)运算符(其作用类似于非布尔数据): ,其中new_df是RHS返回的副本 contains还接受正则表达式 如果上面抛出ValueError,原因可能是您的数据类型混合,因此请使用na=F

我做了一些搜索,不知道如何通过df[“col”]过滤数据帧。str.contains(word),但是我想知道是否有一种方法可以做相反的事情:通过该集合的补充过滤数据帧。例如:为了
的效果!(df[“col”].str.contains(word))

这可以通过
DataFrame
方法实现吗?

您可以使用反转(~)运算符(其作用类似于非布尔数据):

,其中
new_df
是RHS返回的副本

contains还接受正则表达式


如果上面抛出ValueError,原因可能是您的数据类型混合,因此请使用
na=False

new_df = df[~df["col"].str.contains(word, na=False)]
df["col"].str.contains(word)==0
或者


在使用上面Andy推荐的命令之前,我必须去掉空值。例如:

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
现在运行命令:

~df["second"].str.contains(word)
我得到以下错误:

TypeError: bad operand type for unary ~: 'float'

我首先使用dropna()或fillna()清除了空值,然后毫无问题地重试了该命令。

我也遇到了not(~)符号的问题,因此这里有另一种方法:


除了nanselm2的答案之外,您还可以使用
0
而不是
False

new_df = df[~df["col"].str.contains(word, na=False)]
df["col"].str.contains(word)==0

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

df[df["col"].apply(lambda x:x not in [word1,word2,word3])]

我希望答案已经贴出来了

我正在添加框架以查找多个单词,并否定来自dataFrame的单词

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

df
=数据帧

column\u a
=来自数据帧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)]

完美的我对正则表达式非常熟悉,并认为它在Python中是不同的——我看到了很多关于
re.compliance
的文章,并告诉自己我以后会谈到这一点。看起来我太适合搜索了,就像你说的:)也许一个完整的例子会有帮助:
df[~df.col.str.contains(word)]
返回原始数据帧的副本,其中排除了与单词匹配的行。可以这样组合吗
df[df[“col1”].str.contains('this'|'that')==False和df[“col2”].str.contains('foo'|'bar')==True]
?谢谢是的,你可以。这里解释了语法:不要忘记,如果我们想移动包含“|”的行,我们应该使用“\”比如
df=df[~df[~col][col].str.contains('\\\\\'')]
也可以使用
~df[“second”].astype(str).str.contains(word)
强制转换为
str
。请参见@Shoresh,我们也可以使用na=False作为此问题的解决方案。看起来,这也会删除带有
NaN
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)]