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

在Pandas DataFrame中插入行时NaN转为NaT的原因及解决方法

问题原因
  • 弃用的append方法类型推断缺陷:append在pandas 2.0+版本已被正式弃用,该方法传入字典构造新行时的类型兼容逻辑存在问题,会错误对不同列的取值做跨列类型推断,导致数值列的np.nan被错误和时间类型做兼容处理,最终数值列被降级为object类型,甚至出现NaN被转为NaT的异常表现。
  • 直接向datetime列插入np.nan会破坏类型:datetime类型的合法空值为NaT,np.nan本身属于浮点类型,直接插入datetime列会触发整列转为兼容多类型的object类型。
解决方法

方案1:单行插入(需手动指定新行时间)

弃用append方法,改用pd.concat拼接类型匹配的新行DataFrame:

from datetime import timedelta
import pandas as pd

date2 = date1 + timedelta(seconds=300)
# 构造和原df结构、列类型完全匹配的新行DataFrame
new_df = pd.DataFrame([[date2, np.nan, np.nan]], columns=df.columns)
df = pd.concat([df, new_df], ignore_index=True)

方案2:自动补全所有5分钟间隔缺失行(适配业务场景)

针对你需要补全固定间隔时间序列的需求,直接使用时间索引重采样的方法更高效,无需手动遍历查找缺失时间点:

# 将date列设为时间索引,按5分钟频率自动补全所有缺失时间点,数值列默认填充NaN
df = df.set_index("date").asfreq("5T").reset_index()

执行任意方案后查看df.dtypes,可确认date列保持带时区的datetime类型,a、b列保持float64类型,空值为标准NaN,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 03:24:02