首页 > 解决方案 > Pandas 布尔过滤顺序

问题描述

我遇到了熊猫的问题。例如,我有数据框,我想过滤它。

df = pd.DataFrame({'A': [i for i in range(5)], 
                   'B': [i ** 2 for i in range(5)]}) 

df[(df.A > 2) & (df.apply(lambda row: print('call'), axis=1))]

但为什么会这样呢?为什么第二条语句对所有行执行?我认为 Pandas 可以使用逻辑和(运算符 &)按顺序过滤

在此处输入图像描述

有人可以解释一下吗?如何在一个数据帧中使用过滤器而不重新分配数据帧?

标签: pythonpandasdataframe

解决方案


print返回None等等

df[(df.A > 2) & (df.apply(lambda row: print('call'), axis=1))]

是相同的

df[(df.A > 2) & pd.Series([None]*5)] 

这与

df[pd.Series([None]*5)]

所有元素都被解释为False所以你得到空DataFrame


推荐阅读