2016-01-21 86 views
1

這是一個簡單的問題,但我發現「切片」DataFramesPandas令人沮喪,來自R獲取包含負值的列的列名稱列表

我有一個DataFramedf以下7列:

df 
Out[77]: 
    fld1 fld2 fld3 fld4 fld5 fld6 fld7 
0  8  8 -1  2  1  7  4 
1  6  6  1  7  5 -1  3 
2  2  5  4  2  2  8  1 
3 -1 -1  7  2  3  2  0 
4  6  6  4  2  0  5  2 
5 -1  5  7  1  5  8  2 
6  7  1 -1  0  1  8  1 
7  6  2  4  1  2  6  1 
8  3  4  4  5  8 -1  4 
9  4  4  3  7  7  4  5 

如何,它產生至少包含一個負數的列清單的方式切片df

回答

5

您可以通過建立適當的系列,然後用它來索引df選擇它們:根據什麼數據

>>> df < 0 
    fld1 fld2 fld3 fld4 fld5 fld6 fld7 
0 False False True False False False False 
1 False False False False False True False 
2 False False False False False False False 
3 True True False False False False False 
4 False False False False False False False 
5 True False False False False False False 
6 False False True False False False False 
7 False False False False False False False 
8 False False False False False True False 
9 False False False False False False False 
>>> (df < 0).any() 
fld1  True 
fld2  True 
fld3  True 
fld4 False 
fld5 False 
fld6  True 
fld7 False 
dtype: bool 

然後

>>> df.columns[(df < 0).any()] 
Index(['fld1', 'fld2', 'fld3', 'fld6'], dtype='object') 

>>> df.columns[(df < 0).any()].tolist() 
['fld1', 'fld2', 'fld3', 'fld6'] 

你想要的結構。我們也可以直接使用這個io索引代入df

>>> df.loc[:,(df < 0).any()] 
    fld1 fld2 fld3 fld6 
0  8  8 -1  7 
1  6  6  1 -1 
2  2  5  4  8 
3 -1 -1  7  2 
4  6  6  4  5 
5 -1  5  7  8 
6  7  1 -1  8 
7  6  2  4  6 
8  3  4  4 -1 
9  4  4  3  4