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

如何在Pandas数据框中格式化包含pd.NaT的时间戳?

解决pd.NaT格式化报错的问题

执行f'{pd.NaT:%Y}'时会直接报错,但f'{np.nan:.2f}'却能返回'nan',核心原因是两者的格式化逻辑不同:

  • np.nan作为浮点型缺失值,它的__format__方法内置了缺失值处理逻辑,格式化时会自动返回'nan'字符串;
  • pd.NaT是pandas的缺失时间戳对象,它的__format__方法在遇到日期格式符时,会尝试对有效时间戳执行格式化操作,但缺失状态下无法完成该操作,因此直接抛出错误。

要实现类似np.nan的行为,有几种简单的解决方式:

方法一:自定义格式化函数

写一个小函数先判断是否为缺失值,再执行格式化:

import pandas as pd

def format_timestamp(ts, fmt):
    return ts.strftime(fmt) if pd.notna(ts) else 'NaT'

# 使用示例
result = f'{format_timestamp(pd.NaT, "%Y")}'
print(result)  # 输出 'NaT'

如果希望返回'nan',只需把函数里的返回值改成'nan'即可。

方法二:利用pandas的dt属性格式化

将pd.NaT放入Series中,用dt.strftime处理,它会自动把缺失值转为NaN,转成字符串后就是'nan':

result = f'{pd.Series([pd.NaT]).dt.strftime("%Y").iloc[0]}'
print(result)  # 输出 'nan'

方法三:f-string内直接做条件判断

如果不想额外写函数,也可以在f-string里直接完成缺失值判断:

ts = pd.NaT
result = f'{ts:%Y}' if pd.notna(ts) else 'NaT'
print(result)  # 输出 'NaT'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:40:35