簡體   English   中英

Python Pandas DataFrames:如果不需要一項,則刪除整行

[英]Python Pandas DataFrames: Dropping entire rows if one entry is unwanted

我想刪除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的樣子:

原始數據框

我嘗試使用布爾運算符定義具有刪除行的新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

這是我想要的輸出:

預期產量

expected_df = unwanted_df.loc[(unwanted_df['C']!='unwanted_1')&(unwanted_df['C']!='unwanted_2')]

您可以使用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'])]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM