如何在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
相关产品推荐
相关产品推荐

