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

pd.to_datetime无法将字符串转为datetime类型,仍保持object的问题

解决Pandas转换带时区字符串为datetime对象(保留原时区)

问题分析

你遇到的核心问题是:直接使用pd.to_datetime()时,pandas默认不会自动将带时区偏移的字符串(如2018-12-31 17:47:14+01:00)解析为带时区感知的datetime对象,因此列类型始终停留在object;而指定utc=True时,pandas会强制将时间转换为UTC时区,这不符合你保留原时区的需求。

解决方案

根据你的需求(保留原时区而非仅偏移量),推荐两种可行方案:

方案1:指定具体时区名称(推荐,支持夏令时)

CET(欧洲中部时间)对应的标准时区标识符是Europe/Paris,使用这个时区名称可以自动处理夏令时(CET/CEST)的偏移切换:

import pandas as pd

df = pd.read_csv('data.csv')
# 解析时指定时区为Europe/Paris
df['Time (CET)'] = pd.to_datetime(df['Time (CET)'], tz='Europe/Paris')

转换后列的数据类型会变为datetime64[ns, Europe/Paris],既保留了时区信息,又能正确识别夏令时的偏移变化。

方案2:仅保留固定时区偏移

如果你的数据只有固定的+01:00偏移,不需要处理夏令时切换,可以通过指定格式来精准解析:

import pandas as pd

df = pd.read_csv('data.csv')
# 使用%z匹配时区偏移部分,指定utc=False保留原偏移
df['Time (CET)'] = pd.to_datetime(df['Time (CET)'], format='%Y-%m-%d %H:%M:%S%z', utc=False)

转换后列的类型为datetime64[ns, pytz.FixedOffset(60)],对应固定的+01:00偏移。

为什么原代码无效?

你的初始代码未指定任何时区相关参数,pandas虽然能解析字符串内容,但不会主动将其标记为带时区的datetime对象,因此列类型保持为object;而utc=True参数会强制将解析后的时间转换为UTC时区,所以类型变为datetime64[ns, UTC]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:28:38