微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 如何删除Pandas中仅包含零的列?

我目前有一个由1和0作为值的列组成的数据帧,我想迭代列并删除仅由0组成的列.这是我到目前为止所尝试的:

ones = []
zeros = []
for year in years:
    for i in range(0,599):
        if year[str(i)].values.any() == 1:
            ones.append(i)
        if year[str(i)].values.all() == 0:
            zeros.append(i)
    for j in ones:
        if j in zeros:
            zeros.remove(j)
    for q in zeros:
        del year[str(q)]

在哪些年份是我正在分析的不同年份的数据框列表,其中包含列中包含一个的列,而零是包含全零的列的列表.有没有更好的方法根据条件删除列?出于某种原因,我必须检查那些列是否也在零列表中,并从零列表中删除它们以获得所有零列的列表.

解决方法:

df.loc[:, (df != 0).any(axis=0)]

以下是它如何工作的细分:

In [74]: import pandas as pd

In [75]: df = pd.DataFrame([[1,0,0,0], [0,0,1,0]])

In [76]: df
Out[76]: 
   0  1  2  3
0  1  0  0  0
1  0  0  1  0

[2 rows x 4 columns]

df!= 0创建一个布尔数据帧,它是真的,其中df是非零的:

In [77]: df != 0
Out[77]: 
       0      1      2      3
0   True  False  False  False
1  False  False   True  False

[2 rows x 4 columns]

(df!= 0).any(axis = 0)返回一个布尔系列,表示哪些列具有非零项. (any操作将沿0轴的值 – 即沿着行 – 聚合成一个布尔值.因此结果是每列的一个布尔值.)

In [78]: (df != 0).any(axis=0)
Out[78]: 
0     True
1    False
2     True
3    False
dtype: bool

并且df.loc可用于选择这些列:

In [79]: df.loc[:, (df != 0).any(axis=0)]
Out[79]: 
   0  2
0  1  0
1  0  1

[2 rows x 2 columns]

要“删除”零列,请重新分配df:

df = df.loc[:, (df != 0).any(axis=0)]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐