我遇到了熊猫的问题。 例如,我有数据框,我想过滤它。
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))]
但是为什么会这样呢?为什么第二条语句对所有行都执行?我认为,熊猫可以使用逻辑和(运算符&)按顺序过滤
有人可以解释我吗?如何在一个数据框中使用过滤器而无需重新分配数据框?
答案 0 :(得分:0)
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
答案 1 :(得分:0)
或者您可以这样做:
df.loc[df.A > 2, "isCalled"] = 'called'
对于其他行:
df.loc[~df.A > 2, "isCalled"] = 'not called'