【发布时间】:2017-05-05 22:20:18
【问题描述】:
我正在尝试根据几个条件过滤数据框。然后,我想从一个单独的、更大的数据框中删除该子集。
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_drop 成为自己单独的数据帧,以保留我删除的记录。
我想我误解了一元应该如何工作。或者我犯了语法错误。但我找不到它,以前的解决方案(例如,removing NaNs from the dataframe)似乎都不适用于这里。
【问题讨论】:
-
我的部分原始评论仍然有效,您传递的不是布尔掩码,而是 df。如果您使用基于
df的掩码,它仍然会失败,因为掩码长度与df2的长度不同 -
这是有道理的。我没有意识到我需要一个布尔掩码,而不是数据框。我现在看到了问题。谢谢!