熊猫:删除行中未填充任何值的行

时间:2020-02-25 05:48:04

标签: python pandas dataframe

我有以下数据框:

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条件,所以这是正确的方法。如果任何列中都有值,则不应删除该行。

result_fin[result_fin['Tag1', 'Tag2', 'Tag3', 'Tag4', 'Tag5'] > 0]

2 个答案:

答案 0 :(得分:1)

尝试df.any(1)

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

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

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

答案 1 :(得分:1)

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

df = df.replace({0:np.nan}).dropna(subset=["tag1","tag2","tag3","tag4","tag5"], 
                                   how="all").fillna(0)