首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pandas:删除任何列中都没有填充值的行

Pandas:删除任何列中都没有填充值的行
EN

Stack Overflow用户
提问于 2020-02-25 13:48:04
回答 2查看 46关注 0票数 1

我有以下数据框架:

代码语言:javascript
运行
复制
Name Age Tag1 Tag2 Tag3 Tag4 Tag5
A    10   1    2    3    55   6
B    23   4    0    5    0    9
C    19   2    0    0    0    0
D    30   0    0    0    0    0
E    44   0    0    0    4    0

从上面的数据帧中,我想删除那些在列Tag1到Tag5中没有任何条目的行。在本例中,它将是行D

有没有一种干净的方法可以在一个非常巨大的数据帧上做到这一点?

我已经尝试过了,但我不认为这是一个正确的方法,因为我必须在这里使用OR条件。如果值出现在任何列中,则不应删除该行。

代码语言:javascript
运行
复制
result_fin[result_fin['Tag1', 'Tag2', 'Tag3', 'Tag4', 'Tag5'] > 0]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-25 13:50:05

试试df.any(1)

代码语言:javascript
运行
复制
>>> df[(df[df.columns[2:]]).any(1)]
  Name  Age  Tag1  Tag2  Tag3  Tag4  Tag5
0    A   10     1     2     3    55     6
1    B   23     4     0     5     0     9
2    C   19     2     0     0     0     0
4    E   44     0     0     0     4     0

或者,使用df.all(1)时反之亦然

代码语言:javascript
运行
复制
>>> df[~(df[df.columns[2:]]==0).all(1)]
  Name  Age  Tag1  Tag2  Tag3  Tag4  Tag5
0    A   10     1     2     3    55     6
1    B   23     4     0     5     0     9
2    C   19     2     0     0     0     0
4    E   44     0     0     0     4     0

(1)建议您查看axis 1

您还可以指定列名['Tag1', 'Tag2', 'Tag3', 'Tag4', 'Tag5'],而不是df.columns[2:]

票数 1
EN

Stack Overflow用户

发布于 2020-02-25 13:52:56

您可以用np.nan替换0,并使用dropna删除相应的行

代码语言:javascript
运行
复制
df = df.replace({0:np.nan}).dropna(subset=["tag1","tag2","tag3","tag4","tag5"], 
                                   how="all").fillna(0)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60388217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档