我有以下数据框:
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]
答案 0 :(得分: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)