[英]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.