2015-05-20 78 views
4

則刪除df列如果列中的所有值都爲「0%」,我想從熊貓數據框中刪除給定列。python pandas:如果條件爲

我DF:

data = {'UK': ['11%', '16%', '7%', '52%', '2%', '5%', '3%', '3%'], 
     'US': ['0%', '0%', '0%', '0%', '0%', '0%', '0%', '0%'], 
     'DE': ['11%', '16%', '7%', '52%', '2%', '5%', '3%', '3%'], 
     'FR': ['11%', '16%', '7%', '52%', '2%', '5%', '3%', '3%'] 
     } 
dummy_df = pd.DataFrame(data, 
         index= ['cat1','cat2','cat3','cat4','cat5','cat6','cat7','cat8'], 
         columns=['UK', 'US', 'DE', 'FR']) 

到目前爲止我的代碼:

dummy_df.drop(dummy_df == '0%',inplace=True) 

我得到一個值誤差:

ValueError: labels ['UK' 'US' 'DE' 'FR'] not contained in axis 
+0

相關的問題[刪除數據幀行中熊貓基於列的值] (http://stackoverflow.com/questions/18172851/deleting-dataframe-row-in-pandas-based-on-column-value) – farhawa

回答

8
In [186]: dummy_df.loc[:, ~(dummy_df == '0%').all()] 
Out[186]: 
     UK DE FR 
cat1 11% 11% 11% 
cat2 16% 16% 16% 
cat3 7% 7% 7% 
cat4 52% 52% 52% 
cat5 2% 2% 2% 
cat6 5% 5% 5% 
cat7 3% 3% 3% 
cat8 3% 3% 3% 

說明:

「0%」你已經得到了比較,這提供了以下數據框:

In [182]: dummy_df == '0%' 
Out[182]: 
     UK US  DE  FR 
cat1 False True False False 
cat2 False True False False 
cat3 False True False False 
cat4 False True False False 
cat5 False True False False 
cat6 False True False False 
cat7 False True False False 
cat8 False True False False 

現在我們想知道哪些列有所有True S:

In [183]: (dummy_df == '0%').all() 
Out[183]: 
UK False 
US  True 
DE False 
FR False 
dtype: bool 

最後,我們可以帶有這些布爾值的索引(但與~相反,因爲想要不要想要選擇這裏是True):dummy_df.loc[:, ~(dummy_df == '0%').all()]

同樣的,你也可以這樣做:dummy_df.loc[:, (dummy_df != '0%').any()](選擇其中至少一個值不等於「0%」列)

+0

非常感謝,這就是我一直在尋找。 –

2

首先得到該列所有值!= '0%'

In [163]: cols = (dummy_df != '0%').any() 

In [164]: cols 
Out[164]: 
UK  True 
US False 
DE  True 
FR  True 
dtype: bool 

然後調用僅cols列它們True

In [165]: dummy_df[cols[cols].index] 
Out[165]: 
     UK DE FR 
cat1 11% 11% 11% 
cat2 16% 16% 16% 
cat3 7% 7% 7% 
cat4 52% 52% 52% 
cat5 2% 2% 2% 
cat6 5% 5% 5% 
cat7 3% 3% 3% 
cat8 3% 3% 3% 
+1

由於OP想要刪除* all *值爲0%的列(因此應該包含任何不爲0%的值的列),請不要將'all'設置爲'any'(請參閱我的答案) – joris

+1

非常感謝。給予好評。 –

+0

@joris你是對的,謝謝。 – Zero