问题:在pandas中的DataFrame上搜索“不包含”
我已经进行了一些搜索,无法弄清楚如何通过过滤数据帧df["col"].str.contains(word)
,但是我想知道是否有一种方法可以反向执行:通过该集合的补充来过滤数据帧。例如:的效果!(df["col"].str.contains(word))
。
可以通过一种DataFrame
方法来完成吗?
回答 0
您可以使用invert(〜)运算符(其作用类似于非布尔数据):
new_df = df[~df["col"].str.contains(word)]
,new_df
RHS返回的副本在哪里。
包含还接受正则表达式…
如果以上方法引发ValueError,则可能是由于您混合使用了数据类型,所以请使用na=False
:
new_df = df[~df["col"].str.contains(word, na=False)]
要么,
new_df = df[df["col"].str.contains(word) == False]
回答 1
我也遇到了not(〜)符号的问题,所以这是另一个StackOverflow线程的另一种方式:
df[df["col"].str.contains('this|that')==False]
回答 2
您可以使用Apply和Lambda选择列中包含列表中任何内容的行。对于您的方案:
df[df["col"].apply(lambda x:x not in [word1,word2,word3])]
回答 3
在使用上面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
现在运行命令:
~df["second"].str.contains(word)
我收到以下错误:
TypeError: bad operand type for unary ~: 'float'
我首先使用dropna()或fillna()摆脱了NULL值,然后重试了命令,没有问题。
回答 4
我希望答案已经发布
我正在添加框架以查找多个单词并从dataFrame中取反。
这里'word1','word2','word3','word4'
=要搜索的模式列表
df
= DataFrame
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)]
回答 5
除了nanselm2的答案,您可以使用0
代替False
:
df["col"].str.contains(word)==0
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。