Python Pandas DataFrames:如果不需要一项,则删除整行

时间:2018-08-11 02:32:24

标签: python pandas dataframe

如果该行的其中一列中有特定条目,我想删除它的整个行。这是我要执行的操作的简化示例。在下面的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的样子:

Original 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

这就是我得到的:

Unexpected Output

我写了另一个小代码,产生了我期望的结果:

expected_df = pd.DataFrame({'A' : ['aA', 'cA'],
                           'B' : ['aB', 'cB'],
                           'C' : ['aC', 'cC'],
                           'D' : ['aD', 'cD']}, 
                           index = ['a','c'])

expected_df

这是我想要的输出:

Expected Output

2 个答案:

答案 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'])]