Python 如何将条件应用于数据帧中的大量列
我想消除具有大量列的数据帧中等于某个值(或在某个范围内)的所有行。例如,如果我有以下数据帧:Python 如何将条件应用于数据帧中的大量列,python,pandas,dataframe,Python,Pandas,Dataframe,我想消除具有大量列的数据帧中等于某个值(或在某个范围内)的所有行。例如,如果我有以下数据帧: 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] 但这似
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]
但这似乎效率低下。有更好的方法吗 只需对整个df执行此操作,然后调用: 条件
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
值的行这是EdChum方法的一种变体。你可以做df!=0
然后使用all
使您的选择器:
>>> (df != 0).all(axis=1)
0 False
1 True
2 True
3 False
dtype: bool
然后使用此选项选择:
>>> df.loc[(df != 0).all(axis=1)]
a b
1 2 1
2 3 2
这样做的好处是,如果您愿意,它可以保留NAN,例如
>>> df
a b
0 1 0
1 2 NaN
2 3 2
3 0 3
>>> df.loc[(df != 0).all(axis=1)]
a b
1 2 NaN
2 3 2
>>> df[(df != 0)].dropna()
a b
2 3 2
正如您在问题中所提到的,您可能需要删除具有某个范围内的值的行,您可以通过以下方法执行此操作
假设范围为0,10,20
frame = DataFrame({'b': [4, 7, -3, 2], 'a': [0, 1, 0, 1]})
mask = frame.applymap(lambda x : False if x in [0 , 10 , 20] else True )
frame[mask.all(axis = 1)]
@DSM是的,只需重新阅读问题,只需致电dropna
frame = DataFrame({'b': [4, 7, -3, 2], 'a': [0, 1, 0, 1]})
mask = frame.applymap(lambda x : False if x in [0 , 10 , 20] else True )
frame[mask.all(axis = 1)]