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

Pandas空DataFrame调用apply报错:是已知特性还是代码缺陷?

Pandas空DataFrame调用.apply赋值报错的原因分析

正常场景示例

import pandas as pd
df = pd.DataFrame(dict(A=[1,2], B=[11,22]))
print(df)
#    A   B
# 0  1  11
# 1  2  22

df["C"] = df.apply(lambda row: row["A"]+1, axis=1)
print(df)
#    A   B  C
# 0  1  11  2
# 1  2  22  3

空DataFrame场景报错示例

df = pd.DataFrame(columns=["A","B"])
print(df)
# Empty DataFrame
# Columns: [A, B]
# Index: []

df["C"] = df.apply(lambda row: row["A"]+1, axis=1)

报错信息:

KeyError                                  Traceback (most recent call last)
~\anaconda3\lib\site-packages\pandas\core\frame.py in _set_item_mgr(self, key, value)
   3750         try:
-> 3751             loc = self._info_axis.get_loc(key)
   3752         except KeyError:

~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   3362             except KeyError as err:
-> 3363                 raise KeyError(key) from err
   3364 

KeyError: 'C'

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_21916/2953292978.py in <module>
----> 1 df["C"] = df.apply(lambda row: row["A"]+1, axis=1)

~\anaconda3\lib\site-packages\pandas\core\frame.py in __setitem__(self, key, value)
   3600             self._setitem_array(key, value)
   3601         elif isinstance(value, DataFrame):
-> 3602             self._set_item_frame_value(key, value)
   3603         elif (
   3604             is_list_like(value)

结论与原因

这是Pandas的已知特性,并非核心代码缺陷。

当DataFrame为空时,apply(axis=1)的lambda函数不会被执行,返回的是一个空Series。由于没有行数据作为参考,Pandas无法推断这个空Series的 dtype 与结构,导致在新增列赋值时触发内部的类型匹配错误,最终抛出KeyError和ValueError。这种情况属于apply函数在无数据边界场景下的预期行为。

解决方案

推荐使用向量化操作替代逐行apply,这种方式在空DataFrame上能正常运行:

df["C"] = df["A"].add(1)

或者提前判断DataFrame是否为空,再执行对应逻辑:

if not df.empty:
    df["C"] = df.apply(lambda row: row["A"]+1, axis=1)
else:
    df["C"] = pd.Series(dtype=int)  # 手动指定数据类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:37:48