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

如何在Python(pandas)中将/Date(1656626400000+0200)/转为datetime?

解决微软JSON格式日期转Pandas Datetime的方法

针对你遇到的/Date(1656626400000+0200)/这类微软JSON日期格式,直接用pd.to_datetime()无法解析,需要先提取其中的毫秒时间戳和时区偏移,再进行转换,以下是两种高效实现方式:

方法一:批量提取+向量式处理(适合大数据量)

利用Pandas的字符串提取功能批量解析日期组件,再统一转换,效率更高:

import pandas as pd

# 示例数据
df = pd.DataFrame({
    'date_col': ['/Date(1656626400000+0200)/', '/Date(1640995200000-0500)/', '无效格式']
})

# 正则提取毫秒时间戳和时区偏移(捕获组分别对应数字和时区)
df[['timestamp_ms', 'tz_offset']] = df['date_col'].str.extract(r'/Date\((\d+)([+-]\d{4})\)/')

# 转换为datetime:先处理毫秒时间戳,再绑定时区
df['datetime'] = pd.to_datetime(df['timestamp_ms'].astype('Int64'), unit='ms')  # Int64支持空值
df['datetime'] = df.apply(
    lambda row: row['datetime'].tz_localize(row['tz_offset']) if pd.notna(row['datetime']) else pd.NaT,
    axis=1
)

方法二:自定义函数+apply(灵活处理异常)

如果需要对异常格式做更精细的判断,用自定义函数结合apply更灵活:

import pandas as pd
import re

def parse_ms_date(s):
    # 匹配日期格式,提取毫秒戳和时区
    match = re.fullmatch(r'/Date\((\d+)([+-]\d{4})\)/', str(s))
    if not match:
        return pd.NaT  # 格式无效返回空值
    ts_ms, tz = match.groups()
    # 毫秒转datetime并绑定时区
    return pd.to_datetime(int(ts_ms), unit='ms').tz_localize(tz)

# 应用到列
df['datetime'] = df['date_col'].apply(parse_ms_date)

关键说明

  • 这类格式是微软序列化JSON时常用的日期格式,核心是13位毫秒时间戳+时区偏移(如+0200表示东二区)
  • tz_localize()用于将 naive datetime 转换为带时区感知的 datetime,避免时区信息丢失
  • 两种方法都处理了格式无效的情况,返回pd.NaT保证数据完整性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:18:08