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

Vaex中正确格式化时间戳:移除UTC偏移中的冒号

解决Vaex中带UTC冒号偏移的时间戳解析问题

问题根源

你遇到的ValueError是因为Python标准库的datetime.strptime中,%z格式符仅支持不带冒号的UTC偏移格式(如+0000),但你的时间戳字符串是带冒号的+00:00,同时格式字符串里%S和%z之间多了一个空格,和原字符串的结构不匹配,导致解析失败。

解决方案

下面提供两种高效的处理方式,优先推荐Vaex内置函数(避免低效的逐行apply):

方法1:用Vaex内置to_datetime自动兼容

Vaex的to_datetime函数可以自动识别带冒号的UTC偏移,无需手动修改字符串,代码更简洁且效率更高:

import vaex as vx
import pandas as pd

# 原始数据创建
df = pd.DataFrame({'quantity' : [0,6,4,3,7,8,3,2],
                   'timestamp' : ['2018-05-01 03:05:00+00:00', '2018-05-01 04:15:00+00:00',
                                '2018-06-02 03:15:00+00:00', '2018-06-02 04:25:00+00:00',
                                '2018-07-03 03:25:00+00:00', '2018-07-03 04:35:00+00:00',
                                '2018-08-04 03:35:00+00:00', '2018-08-04 04:45:00+00:00'],
                   'id' : [1,2,3,4,5,6,7,8] 
                   })
df = vx.from_pandas(df=df, copy_index=True)

# 直接解析,无需手动处理偏移
df['timestamp_parsed'] = df['timestamp'].to_datetime()
# 如果需要指定格式(可选)
# df['timestamp_parsed'] = df['timestamp'].to_datetime(format="%Y-%m-%d %H:%M:%S%z")

方法2:手动移除UTC偏移中的冒号(兼容低版本Vaex)

如果你的Vaex版本较旧,内置函数不支持带冒号的偏移,可以用矢量化字符串替换先清理格式,再解析:

import vaex as vx
import pandas as pd
from datetime import datetime
import numpy as np

# 原始数据创建(同上)
df = pd.DataFrame({'quantity' : [0,6,4,3,7,8,3,2],
                   'timestamp' : ['2018-05-01 03:05:00+00:00', '2018-05-01 04:15:00+00:00',
                                '2018-06-02 03:15:00+00:00', '2018-06-02 04:25:00+00:00',
                                '2018-07-03 03:25:00+00:00', '2018-07-03 04:35:00+00:00',
                                '2018-08-04 03:35:00+00:00', '2018-08-04 04:45:00+00:00'],
                   'id' : [1,2,3,4,5,6,7,8] 
                   })
df = vx.from_pandas(df=df, copy_index=True)

# 矢量化替换:移除UTC偏移中的冒号
df['timestamp_clean'] = df['timestamp'].str.replace(r'(\+\d{2}):(\d{2})$', r'\1\2', regex=True)

# 用匹配的格式解析(注意%z前无空格)
date_format = "%Y-%m-%d %H:%M:%S%z"
df['timestamp_parsed'] = df['timestamp_clean'].apply(lambda x: np.datetime64(datetime.strptime(x, date_format)))

注意事项

  • 尽量避免使用apply逐行处理数据,Vaex的矢量化操作(如str.replace、内置to_datetime)性能远高于逐行处理,尤其适合大数据集。
  • 如果你的时间戳都是UTC+00:00,也可以直接截断偏移部分,解析为本地时间后再设置时区,但不如上述方法通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:30:39