gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:23:31 24 4
gpt4 key购买 nike

我目前有一个由 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 创建一个 bool 数据帧,该数据帧为 True,其中 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) 返回一个 bool 系列,指示哪些列具有非零条目。 (any 操作将沿 0 轴(即沿行)的值聚合为单个 bool 值。因此,每列的结果是一个 bool 值。)

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

关于python - 如何删除 Pandas 中仅包含零的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21164910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com