Pandas中两种Series过滤方法的差异解析(带/不带lambda)
Pandas Series两种loc过滤方式的差异分析
这两种写法输出结果一致,但核心逻辑和适用场景有明显区别:
直接表达式写法
snow.loc[(snow.index.month==1) & (snow>0)]
- 条件直接基于当前作用域内的
snow变量计算,相当于提前生成布尔索引再传给loc。 - 如果代码执行到这一行前,
snow被意外修改(比如重新赋值、切片操作覆盖了变量),条件会基于修改后的对象计算,容易出现不符合预期的结果。
Lambda表达式写法
snow.loc[lambda s: (s.index.month==1) & (s>0)]
- 这里的
s是Pandas自动传入的当前调用loc方法的Series实例,保证用的是loc执行时的目标对象,和外部作用域的snow变量是否被修改无关。 - 更适合链式调用场景,无需额外定义中间变量,比如:
# 链式处理后直接用lambda过滤 snow[snow < 10].fillna(0).loc[lambda s: s.index.month == 1]
这里lambda里的s是前两步处理后的结果,要是用直接写法,得先把中间结果存成新变量再写过滤条件,流程会繁琐很多。
内容的提问来源于stack exchange,提问作者mohsentajdeh
相关产品推荐
相关产品推荐

