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

Pandas使用fillna(value=dict)时丢失时区信息是否为预期行为?

pandas.fillna使用字典参数时区丢失是否为预期行为?

在Python 3.10.8、pandas 1.4.4环境下执行以下代码:

from datetime import datetime, timezone
import pandas

print(pandas.__version__)  # 输出: '1.4.4'

df = pandas.DataFrame(data={"end_date": [datetime(2022, 1, 20, tzinfo=timezone.utc)]})
print(df.end_date.dt.tz)  # 输出: datetime.timezone.utc

# 使用字典参数调用fillna,无缺失值但时区丢失
result1 = df.fillna(value={"end_date": datetime.now(tz=timezone.utc)}).end_date.dt.tz
print(result1)  # 输出: None

# 直接对Series调用fillna,时区保留
result2 = df.assign(end_date=lambda df: df["end_date"].fillna(datetime.now(tz=timezone.utc))).end_date.dt.tz
print(result2)  # 输出: datetime.timezone.utc

结论

这是pandas 1.4.x版本的预期行为,属于该版本的设计限制,在pandas 1.5.0及后续版本中已修复此问题。

原因说明

在pandas 1.4.x中,当使用fillna(value={列名: 填充值})的字典参数形式时,即使目标列没有缺失值,内部的类型对齐逻辑仍会被触发。该逻辑在处理带时区的datetime类型时存在缺陷:填充值的时区信息会被忽略,导致原列的时区信息被强制剥离。

而直接对Series调用fillna()时,类型检查逻辑会严格匹配原列的带时区datetime类型,因此即使执行填充操作(哪怕无缺失值),时区信息也会被完整保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:31:18