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

当时间字符串因GMT格式存在差异时,如何将字符串列转为datetime

问题:转换DataFrame中两种格式的时间戳字符串为datetime类型

场景:现有一个Pandas DataFrame,其中某列包含两种不同格式的时间戳字符串,格式定义如下:

fmt = "%a %b %d %H:%M:%S %Z%z %Y"
fmt_2 = "%a %b %d %H:%M:%S %Z %Y"

示例时间戳及DataFrame构建代码:

from datetime import datetime
import pandas as pd

# 示例时间戳
stamp = "Fri Oct 11 15:09:30 GMT+01:00 2019"
stamp_2 = 'Sun Oct 27 08:05:47 GMT 2019'
stamp_3 = 'Sat Oct 26 08:05:47 GMT 2019'
stamp_4 = "Sat Oct 12 15:09:30 GMT+01:00 2019"

# 构建示例DataFrame
question_dict = {"time":[stamp, stamp_2, stamp_3, stamp_4], "record":[1,2,3,4]}
question_df = pd.DataFrame(question_dict)

解决方案

方法1:利用pd.to_datetime的错误处理(推荐,效率更高)

先尝试用第一种格式转换,转换失败的行再用第二种格式处理:

# 定义格式
fmt = "%a %b %d %H:%M:%S %Z%z %Y"
fmt_2 = "%a %b %d %H:%M:%S %Z %Y"

# 第一步:用fmt转换,失败的设为NaT
question_df['datetime'] = pd.to_datetime(question_df['time'], format=fmt, errors='coerce')
# 第二步:筛选出未转换成功的行,用fmt_2转换
mask = question_df['datetime'].isna()
question_df.loc[mask, 'datetime'] = pd.to_datetime(question_df.loc[mask, 'time'], format=fmt_2, errors='coerce')

# 查看结果
print(question_df)
print(question_df.info())

方法2:自定义函数结合apply(逻辑直观)

编写一个函数,依次尝试两种格式转换,捕获异常:

def parse_timestamp(s):
    try:
        return datetime.strptime(s, fmt)
    except ValueError:
        try:
            return datetime.strptime(s, fmt_2)
        except ValueError:
            return pd.NaT  # 处理两种格式都不匹配的情况

question_df['datetime'] = question_df['time'].apply(parse_timestamp)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:20:59