You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas 1.4.4中DataFrame.apply处理空DF时返回类型异常问题

Pandas apply在空DataFrame下返回类型异常的原因分析

问题场景

我需要处理空DataFrame和非空DataFrame的衍生Series场景,比如构造空DataFrame:

import pandas as pd
df = pd.DataFrame({'a':[], 'b':[]})

当同时满足以下两个条件时,apply(axis='columns')会意外返回DataFrame而非预期的Series:

  • 输入的DataFrame为空
  • 在apply的lambda表达式中调用了外部函数

示例代码如下:

def f(x):
    if x%2 == 0: return True
    else: return False

test1 = df.apply(lambda row: 'foo' if f(row[0]) else 'bar', axis='columns')
test2 = df.apply(lambda row: 'foo' if True else 'bar', axis='columns')

其中test1返回空DataFrame,test2返回空Series;而当DataFrame非空时,两者都会正常返回Series,符合预期。

异常原因

这是Pandas 1.4.4版本存在的bug。在处理空DataFrame的apply操作时,Pandas需要推断返回结果的类型:

  • 对于test2这类lambda内部没有外部函数调用的情况,Pandas可以直接解析lambda的返回值类型(字符串标量),因此正确推断出应该返回Series。
  • 对于test1这类lambda调用了外部函数的情况,Pandas的类型推断逻辑出现错误,无法正确识别返回值的标量属性,错误地将结果判定为需要返回DataFrame。

版本修复验证

升级至Pandas 1.5.2版本后,该bug已被修复,test1和test2均会返回空Series,与预期一致。

内容的提问来源于stack exchange,提问作者Marmoh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:05:55