我试图根据几个条件过滤数据帧。然后,我想从一个单独的,更大的数据帧中删除该子集。
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)似乎都不适用于此。
答案 0 :(得分:5)
我认为您需要在大数据框中进行过滤:
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