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

Pandas读取CSV时解析同列多格式含T的Datetime问题

解决pandas解析同一列多种时间格式的问题

方案一:自定义兼容两种格式的解析函数

写一个能处理两种时间格式的解析函数,通过异常捕获适配不同格式:

import datetime
import pandas as pd

def parse_datetime(x):
    # 先尝试解析带秒的格式
    try:
        return datetime.datetime.strptime(x, '%Y-%m-%dT%H:%M:%S')
    # 失败则尝试不带秒的格式
    except ValueError:
        return datetime.datetime.strptime(x, '%Y-%m-%dT%H:%M')

# 读取CSV时指定解析的日期列和自定义解析器
df = pd.read_csv(
    '你的文件路径.csv',
    parse_dates=['目标时间列名1', '目标时间列名2'],  # 替换成你要解析的多列名称
    date_parser=parse_datetime,
    low_memory=False
)

方案二:利用pandas内置的自动识别(pandas 2.0+)

如果你的pandas版本是2.0及以上,可直接使用format='mixed'参数,让pandas自动识别列中的多种时间格式,无需自定义函数:

import pandas as pd

# 先读取文件,不提前解析日期
df = pd.read_csv('你的文件路径.csv', low_memory=False)

# 对需要解析的列逐一处理
df['目标时间列名1'] = pd.to_datetime(df['目标时间列名1'], format='mixed', errors='coerce')
df['目标时间列名2'] = pd.to_datetime(df['目标时间列名2'], format='mixed', errors='coerce')

注:errors='coerce'会将无法解析的异常值转为NaT,避免因个别脏数据导致整列解析失败。

原问题原因解析

你之前用的lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%S')只能匹配带秒的时间格式,当遇到不带秒的2022-01-05T02:24时会抛出异常,进而导致整个列的解析逻辑异常(甚至连符合格式的行也无法正常解析)。通过异常捕获或自动格式识别,就能解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:42:50