pandas:使用〜删除数据帧的子集

ale*_*e19 1 python pandas

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

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]
Run Code Online (Sandbox Code Playgroud)

我想要df2的以下输出:

         A  D      E    F
2     TEST  3   test  foo
3     TEST  3  train  foo
Run Code Online (Sandbox Code Playgroud)

相反,我收到以下错误:

TypeError:一元〜:'str'的坏操作数类型

我没有直接过滤df2的原因是我想让df_drop成为自己独立的数据帧,以便保留我丢弃的记录.

我想我误解了一元是如何工作的.或者我犯了语法错误.但我找不到它,以前没有任何解决方案(例如,从数据帧中删除NaN)似乎适用于此处.

jez*_*ael 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
Run Code Online (Sandbox Code Playgroud)