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

Pandas中object转datetime遇特定格式值为空问题求助

解决DataFrame多格式日期转换为datetime的问题

问题出在第二种日期格式2023-03-04-15.22.31.000000的分隔符不符合标准datetime格式,默认的pd.to_datetime无法自动识别,而你指定的format='%Y-%m-%d %H:%M:%S'也和该格式不匹配,因此转换后返回NaT(datetime类型的空值)。

以下是两种可行的解决方案:

方案一:统一格式后转换

先通过字符串替换将特殊格式转为标准datetime格式,再统一执行转换:

import pandas as pd

# 将"YYYY-MM-DD-HH.MM.SS.ffffff"格式转为标准的"YYYY-MM-DD HH:MM:SS.ffffff"
df['date'] = df['date'].str.replace(
    r'^(\d{4}-\d{2}-\d{2})-(\d{2})\.(\d{2})\.(\d{2})\.(\d+)$',
    r'\1 \2:\3:\4.\5',
    regex=True
)

# 此时两种格式都能被pd.to_datetime识别
df['date'] = pd.to_datetime(df['date'], errors='coerce')

如果不需要保留微秒部分,可简化替换规则:

df['date'] = df['date'].str.replace(
    r'^(\d{4}-\d{2}-\d{2})-(\d{2})\.(\d{2})\.(\d{2})\.\d+$',
    r'\1 \2:\3:\4',
    regex=True
)
df['date'] = pd.to_datetime(df['date'], errors='coerce')

方案二:分格式单独处理

通过掩码区分两种日期格式,分别指定对应格式转换,效率更高:

import pandas as pd

# 标记出第二种格式的行
mask = df['date'].str.match(r'^\d{4}-\d{2}-\d{2}-\d{2}\.\d{2}\.\d{2}\.\d+$')

# 直接用对应格式匹配第二种日期
df.loc[mask, 'date'] = pd.to_datetime(
    df.loc[mask, 'date'],
    format='%Y-%m-%d-%H.%M.%S.%f',
    errors='coerce'
)

# 第一种格式让pd.to_datetime自动识别
df.loc[~mask, 'date'] = pd.to_datetime(df.loc[~mask, 'date'], errors='coerce')

说明

  • 方案二中的%f是匹配微秒的格式符,若不需要微秒,可将format改为%Y-%m-%d-%H.%M.%S,同时去掉原字符串末尾的.000000部分(或直接忽略,转换时会自动截断)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:57:33