2016-01-21 87 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