从数据框中选择具有非零值的列

use*_*463 3 python-2.7 pandas

我有以下数据。我只想从数据框中返回至少包含一个非零值的列。因此,在下面的示例中,它将是列ALF。返回非零行似乎并不棘手,但是选择列和记录给我带来了一些麻烦。

print df

Data:

Type             ADR             ALE     ALF               AME  
Seg0              0.0            0.0     0.0              0.0   
Seg1              0.0            0.0     0.5              0.0 
Run Code Online (Sandbox Code Playgroud)

当我尝试以下链接时:

熊猫:如何在稀疏表中选择具有非零值的列

m1 = (df['Type'] == 'Seg0')
m2 = (df[m1] != 0).all()

print (df.loc[m1,m2])
Run Code Online (Sandbox Code Playgroud)

我收到“类型”的关键错误

jez*_*ael 5

我认为您可以得到,key error因为第一列是index

解决方案DataFrame.any用于检查至少一个非零值以掩盖然后过滤Trues的索引:

m2 = (df != 0).any()
a = m2.index[m2]
print (a)
Index(['ALF'], dtype='object')
Run Code Online (Sandbox Code Playgroud)

或者,如果需要list

a = m2.index[m2].tolist()
print (a)
['ALF']
Run Code Online (Sandbox Code Playgroud)

相似的解决方案是过滤器列名称:

a = df.columns[m2]
Run Code Online (Sandbox Code Playgroud)

详细说明

print (m2)
ADR    False
ALE    False
ALF     True
AME    False
dtype: bool
Run Code Online (Sandbox Code Playgroud)