布尔滤波ord

2024-04-19 03:23:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了熊猫的问题。 例如,我有dataframe,我想过滤它。你知道吗

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

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

enter image description here

有人能解释一下吗?如何在一个数据帧中使用筛选器而不重新分配数据帧?你知道吗


Tags: 数据lambdaindataframedfforrange语句
2条回答

或者你可以这样做:

df.loc[df.A > 2, "isCalled"] = 'called'

对于其他行:

df.loc[~df.A > 2, "isCalled"] = 'not called'

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

相关问题 更多 >