gpt4 book ai didi

python - 如何在python中的pandas.DataFrame中找出全部用零填充的行或列并将其删除?

转载 作者:行者123 更新时间:2023-12-01 05:16:41 26 4
gpt4 key购买 nike

我有这样的 pandas.DataFrame() 对象:

In [11]: df
Out[11]:
a b
0 0 1
1 0 1
2 0 0
3 0 0
4 1 1

[5 rows x 2 columns]

我想删除全部用零填充的行:此处索引为 2 和 3 的行。

期望的输出:

In [12]: magic_func(df)
Out[12]:
a b
0 0 1
1 0 1
4 1 1

[3 rows x 2 columns]

最佳答案

df.loc[~(df == 0).all(axis=1)]
<小时/>

演示:

In [92]: df = pd.DataFrame({'a':[0,0,0,0,1], 'b':[1,1,0,0,1]})

In [93]: df
Out[93]:
a b
0 0 1
1 0 1
2 0 0
3 0 0
4 1 1

[5 rows x 2 columns]

In [94]: (df == 0).all(axis=1)
Out[94]:
0 False
1 False
2 True
3 True
4 False
dtype: bool

In [95]: df.loc[~(df == 0).all(axis=1)]
Out[95]:
a b
0 0 1
1 0 1
4 1 1

[3 rows x 2 columns]
<小时/>

df[~df.isin([0]).all(axis=1)] 也有效:

In [108]: df[~df.isin([0]).all(axis=1)]
Out[108]:
a b
0 0 1
1 0 1
4 1 1

但对于大型数据帧来说可能会更慢:

In [106]: df2 = pd.concat([df]*10000)

In [109]: %timeit df2.loc[~(df2 == 0).all(axis=1)]
100 loops, best of 3: 5.19 ms per loop

In [110]: %timeit df2[~df2.isin([0]).all(axis=1)]
10 loops, best of 3: 50.2 ms per loop
当您需要针对一大组值测试成员资格时,

isin 非常有用,但对于只有一个值,df == 0 并不奇怪,因为更多直接,更快。

关于python - 如何在python中的pandas.DataFrame中找出全部用零填充的行或列并将其删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23062698/

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