我想在具有大量列的数据帧中消除所有等于某个值(或在某个范围内)的行。例如,如果我有以下数据框:
a b
0 1 0
1 2 1
2 3 2
3 0 3
并希望删除包含0的所有行,我可以使用:
a_df[(a_df['a'] != 0) & (a_df['b'] !=0)]
但是当您处理大量列时,这会变得很痛苦。可以这样做:
for i in a_df.columns.values:
a_df = a_df[a_df[i] != 0]
但这似乎效率低下。有一个更好的方法吗?
答案 0 :(得分:1)
只需为整个df执行此操作并致电dropna
:
In [45]:
df[df != 0].dropna()
Out[45]:
a b
1 2 1
2 3 2
条件df != 0
生成一个布尔掩码:
In [47]:
df != 0
Out[47]:
a b
0 True False
1 True True
2 True True
3 False True
当它与df结合使用时会产生NaN
值,但不满足条件:
In [48]:
df[df != 0]
Out[48]:
a b
0 1 NaN
1 2 1
2 3 2
3 NaN 3
调用dropna
会删除NaN
值
答案 1 :(得分:1)
这是EdChum方法的变体。您可以#printIcon{
background-image: url("../img/printingIcon.png");
background-size: 64px 70px;
}
然后使用df != 0
制作选择器:
all
然后使用它来选择:
>>> (df != 0).all(axis=1)
0 False
1 True
2 True
3 False
dtype: bool
这样做的好处是可以保留NaN,例如
>>> df.loc[(df != 0).all(axis=1)]
a b
1 2 1
2 3 2