Skip to main content
 首页 » 编程设计

python之获取包含负值的列的列名列表

2025年05月04日32freeliver54

这是一个简单的问题,但我发现 Pandas 中的“切片”DataFrames 令人沮丧,来自 R。

我有一个 DataFrame df 下面有 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 进行切片?

请您参考如下方法:

您可以通过构建适当的 Series 然后使用它索引到 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'] 

取决于你想要的数据结构。我们也可以直接在 df 中使用这个 io 索引:

>>> 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