删除Pandas数据框中全为零的行
我可以用 pandas
的 dropna()
功能来删除那些某些列或所有列都是 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