Answers:
您可以使用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]
df[~df.col.str.contains(word)]
返回原始数据框的副本,其中包含与该单词匹配的排除行。
我也遇到了not(〜)符号的问题,所以这是另一个StackOverflow线程的另一种方式:
df[df["col"].str.contains('this|that')==False]
df[df["col1"].str.contains('this'|'that')==False and df["col2"].str.contains('foo'|'bar')==True]
?谢谢!
df = df[~df["col"].str.contains('\|')]
在使用上面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值,然后重试了命令,没有问题。
~df["second"].astype(str).str.contains(word)
强制转换为str
。见stackoverflow.com/questions/43568760/...
我希望答案已经发布
我正在添加框架以查找多个单词并从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)]
re.complies
并告诉自己我以后再讲。看起来我过度适合搜索,就像您说的那样