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

Pandas to_datetime处理混合日期格式报错及NaT问题求助

处理混合日期格式的Pandas datetime转换问题

问题场景

DataFrame日期列同时存在两种格式:

  • 常规格式:YYYY-MM-DD HH:MM
  • ISO8601格式:YYYY-MM-DDTHH:MM:SS±HH:MM(如2022-03-04T23:00:00+01:00)

遇到的问题:

  1. 直接调用pd.to_datetime()转换后,调用.dt.time报错:Can only use .dt accessor with datetimelike values
  2. 添加format='mixed'参数后,所有值变为NaT,单一格式数据也无法正常转换

解决方案

方案1:升级Pandas并直接转换

较新版本的Pandas(>=1.5.0)已支持自动识别这两种混合格式,无需额外参数:

import pandas as pd

d = {'Timestamp': ['2022-03-05T23:00:00+01:00', '2022-03-04T20:00:00+01:00', '2024-04-13 13:00']}
df = pd.DataFrame(data=d)

# 直接转换日期列,errors='coerce'将无法识别的值转为NaT
df['Timestamp'] = pd.to_datetime(df['Timestamp'], errors='coerce')

# 正常提取时分信息,也可访问其他datetime属性(如.dt.date、.dt.hour)
print(df['Timestamp'].dt.time)

方案2:分批次转换(兼容旧版Pandas)

如果无法升级Pandas,可分两步处理未转换的格式:

import pandas as pd

d = {'Timestamp': ['2022-03-05T23:00:00+01:00', '2022-03-04T20:00:00+01:00', '2024-04-13 13:00']}
df = pd.DataFrame(data=d)

# 第一步:转换可自动识别的格式,保留无法识别的原始字符串
df['Timestamp'] = pd.to_datetime(df['Timestamp'], errors='ignore')

# 第二步:筛选出未转换的object类型值,单独转换
mask = df['Timestamp'].dtype == object
df.loc[mask, 'Timestamp'] = pd.to_datetime(df.loc[mask, 'Timestamp'], errors='coerce')

# 正常访问datetime属性
print(df['Timestamp'].dt.time)

关于format='mixed'的说明

format='mixed'要求所有日期字符串必须匹配推断出的单一格式,混合多种格式时会导致推断失败,因此所有值转为NaT,不适合当前场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 00:26:23