删除Pandas数据框中全为零的行

186 投票
16 回答
460204 浏览
提问于 2025-04-17 23:54

我可以用 pandasdropna() 功能来删除那些某些列或所有列都是 NA 的行。请问有没有类似的功能可以用来删除所有列的值都是 0 的行呢?

P   kt  b   tt  mky depth
1   0   0   0   0   0
2   0   0   0   0   0
3   0   0   0   0   0
4   0   0   0   0   0
5   1.1 3   4.5 2.3 9.0

在这个例子中,我们想要从数据框中删除前四行。

谢谢!

16 个回答

30

把所有的零替换成nan,然后删除那些所有值都是nan的行。接着,再把nan替换回零。

import numpy as np
df = df.replace(0, np.nan)
df = df.dropna(how='all', axis=0)
df = df.replace(np.nan, 0)
34

我大约每个月都会查一次这个问题,每次都得从评论里找出最好的答案:

df.loc[(df!=0).any(1)]

谢谢你,Dan Allan!

57

我觉得这个解决方案是最简洁的:

df= df[df['ColName'] != 0]
221

一行代码搞定。不需要转置:

df.loc[~(df==0).all(axis=1)]

对于喜欢对称的人,这个方法也可以用...

df.loc[(df!=0).any(axis=1)]
146

结果发现,这可以用一种很简洁的方式来表示,叫做“向量化”。

> df = pd.DataFrame({'a':[0,0,1,1], 'b':[0,1,0,1]})
> df = df[(df.T != 0).any()]
> df
   a  b
1  0  1
2  1  0
3  1  1

撰写回答