Python 熊猫:使用~

Python 熊猫:使用~,python,pandas,Python,Pandas,我正在尝试根据几个条件过滤数据帧。然后,我想从一个单独的、更大的数据帧中删除该子集 df = pd.DataFrame({ 'A' : ['UNKNOWN','UNK','TEST','TEST'], 'E' : pd.Categorical(["test","train","test","train"]), 'F' : 'foo' }) df2 = pd.DataFrame({ 'A' : ['UNKNOWN',

我正在尝试根据几个条件过滤数据帧。然后,我想从一个单独的、更大的数据帧中删除该子集

df = pd.DataFrame({ 'A' : ['UNKNOWN','UNK','TEST','TEST'],
                    'E' : pd.Categorical(["test","train","test","train"]),
                    'F' : 'foo' })

df2 = pd.DataFrame({ 'A' : ['UNKNOWN','UNK','TEST','TEST','UNKOWN','UNKKK'],
                    'E' : pd.Categorical(["test","train","test","train",'train','train']),
                    'D' : np.array([3] * 6,dtype='int32'),
                    'F' : 'foo' })

rgx = r'UNKNOWN|UNK'
df_drop = df.loc[df['A'].str.contains(rgx, na=False, flags=re.IGNORECASE, regex=True, case=False)]
df2 = df2[~df_drop]
我想要df2的以下输出:

         A  D      E    F
2     TEST  3   test  foo
3     TEST  3  train  foo
相反,我得到了以下错误:

TypeError:一元数的操作数类型错误:'str'

我不直接过滤df2的原因是我想让df_删除它自己单独的数据帧,以便保留我删除的记录


我想我误解了一元的工作原理。或者我犯了语法错误。但是我找不到它,而且以前的解决方案(例如)似乎都不适用于这里。

我认为您需要在大数据帧中进行筛选:

rgx = r'UNKNOWN|UNK'
mask = df2['A'].str.contains(rgx, na=False, flags=re.IGNORECASE, regex=True, case=False)
print (mask)
0     True
1     True
2    False
3    False
4     True
5     True
Name: A, dtype: bool

print (df2[~mask])
      A  D      E    G
2  TEST  3   test  foo
3  TEST  3  train  foo

我认为您需要大数据帧中的过滤器:

rgx = r'UNKNOWN|UNK'
mask = df2['A'].str.contains(rgx, na=False, flags=re.IGNORECASE, regex=True, case=False)
print (mask)
0     True
1     True
2    False
3    False
4     True
5     True
Name: A, dtype: bool

print (df2[~mask])
      A  D      E    G
2  TEST  3   test  foo
3  TEST  3  train  foo

实际上,在查看OP的期望答案后,这是语义上正确的答案+1@EdChum-谢谢。这太完美了,谢谢!我很快就会接受你的回答!实际上,在查看OP的期望答案后,这是语义上正确的答案+1@EdChum-谢谢。这太完美了,谢谢!我很快就会接受你的回答!我的部分原始评论仍然有效,您传递的不是布尔掩码,而是df。如果使用基于
df
的掩码,它仍然会失败,因为掩码长度与
df2
的长度不同,这是有意义的。我没有意识到我需要一个布尔掩码,而不是一个数据帧。我现在明白问题所在了。非常感谢。我的部分原始评论仍然有效,您传递的不是布尔掩码,而是df。如果使用基于
df
的掩码,它仍然会失败,因为掩码长度与
df2
的长度不同,这是有意义的。我没有意识到我需要一个布尔掩码,而不是一个数据帧。我现在明白问题所在了。非常感谢。