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

如何解决含NaT值的每行最大Timestamp计算全NaN问题?

问题:含NaT的时间列计算行最大值时全变为NaN

环境:Databricks 11.3(Python 3.9.5)

需求:计算每行的最新Timestamp,但当数据中出现NaT值时,max_time列全部变为NaN。测试模拟数据时,df.max(axis=1)可正常得到每行最大时间(含NaT的行也能正确计算),但应用到实际数据时,前10行无NaT时计算正常,加入第11行含NaT的记录后,整个max_time列变为NaN。

可复现代码:

y = pd.DataFrame(
    {
    'last_a': ['2023-09-06 10:24:47.386000+00:00', '2023-09-06 11:09:52.037000+00:00', '2023-09-06 11:09:52.037000+00:00', '2023-09-06 07:27:13.691000+00:00'],
    'last_b': ['2023-09-10 21:56:46.704120800+00:00', '2023-09-11 04:19:59.189798400+00:00', '2023-09-11 04:19:59.189798400+00:00', None]
    },
    columns=['last_a', 'last_b']
)

# y = y.loc[0:2]

y['last_a'] = pd.to_datetime(y['last_a'],format= '%Y-%m-%dT%H:%M:%S')
y['last_b'] = pd.to_datetime(y['last_b'],format= '%Y-%m-%dT%H:%M:%S')
y['last_max'] = y.max(axis=1)
y

问题原因

  1. 格式字符串不匹配:你的pd.to_datetime指定了format='%Y-%m-%dT%H:%M:%S',但原始时间字符串用空格分隔日期和时间(如2023-09-06 10:24:47...),而非T,这会导致转换失败,部分值被转为NaT,甚至引发列类型异常。
  2. 数据类型不一致:若实际数据中某列存在非datetime类型的隐式转换,出现NaT时max(axis=1)会因类型冲突返回全NaN。
  3. Pandas版本差异:不同Pandas版本对max(axis=1)处理NaT的逻辑有区别,Databricks环境中的Pandas版本可能存在此兼容性问题。

修复方案

方案1:修正时间转换格式

去掉错误的format参数让Pandas自动识别,或使用匹配的格式字符串:

# 方法A:自动识别格式(推荐,适配多种时间格式)
y['last_a'] = pd.to_datetime(y['last_a'])
y['last_b'] = pd.to_datetime(y['last_b'])

# 方法B:精确匹配格式(针对带时区和微秒的时间)
y['last_a'] = pd.to_datetime(y['last_a'], format='%Y-%m-%d %H:%M:%S.%f%z')
y['last_b'] = pd.to_datetime(y['last_b'], format='%Y-%m-%d %H:%M:%S.%f%z')

方案2:用apply逐行计算最大值

绕过df.max(axis=1)的类型问题,逐行处理并忽略NaT:

y['last_max'] = y.apply(lambda row: max(row.dropna()), axis=1)

方案3:使用numpy.nanmax

利用numpy的nanmax函数自动忽略NaT/NaN,计算每行最大值:

import numpy as np

y['last_max'] = np.nanmax(y, axis=1)

方案4:强制统一列类型为datetime64

先确保所有时间列类型统一,再计算最大值:

y = y.astype({'last_a': 'datetime64[ns, UTC]', 'last_b': 'datetime64[ns, UTC]'})
y['last_max'] = y.max(axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:00:58