我有以下数据。我只想从数据框中返回至少包含一个非零值的列。因此,在下面的示例中,它将是列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)
我收到“类型”的关键错误
我认为您可以得到,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)