如果该行的其中一列中有特定条目,我想删除它的整个行。这是我要执行的操作的简化示例。在下面的DataFrame中,我想摆脱行“ b”和“ d”,因为它们在列“ C”中有不需要的条目:
unwanted_df = pd.DataFrame({'A' : ['aA', 'bA', 'cA', 'dA'],
'B' : ['aB', 'bB', 'cB', 'dB'],
'C' : ['aC', 'unwanted_1', 'cC', 'unwanted_2'],
'D' : ['aD', 'bD', 'cD', 'dD']},
index = ['a','b','c','d'])
unwanted_df
这是DataFrame的样子:
我尝试使用布尔运算符定义具有删除行的新DataFrame,如下所示:
dropped_unwanted_df = \
unwanted_df.drop(unwanted_df[(unwanted_df['C'] == 'unwanted_1') |
(unwanted_df['C'] == 'unwanted_2')], axis = 1)
但是,输出结果不是预期的。
dropped_unwanted_df
这就是我得到的:
我写了另一个小代码,产生了我期望的结果:
expected_df = pd.DataFrame({'A' : ['aA', 'cA'],
'B' : ['aB', 'cB'],
'C' : ['aC', 'cC'],
'D' : ['aD', 'cD']},
index = ['a','c'])
expected_df
这是我想要的输出:
答案 0 :(得分:0)
expected_df = unwanted_df.loc[(unwanted_df['C']!='unwanted_1')&(unwanted_df['C']!='unwanted_2')]
答案 1 :(得分:0)
您可以使用 isin
:
unwanted_df.loc[~unwanted_df.isin(['unwanted_1', 'unwanted_2']).any(1)]
A B C D
a aA aB aC aD
c cA cB cC cD
或者,如果您只想检查列C
:
unwanted_df.loc[~unwanted_df.C.isin(['unwanted_1', 'unwanted_2'])]