pd.to_datetime无法处理类似'10/30/2022 7:00:00 AM +01:00'的时间值
解决pandas日期字符串转换为带时区ISO格式的问题
问题分析
你遇到的AttributeError大概率是因为pd.to_datetime解析时未正确识别带时区的日期格式,导致生成的Series并非datetime类型;另外你原代码的格式化字符串未包含时区部分,也无法得到目标格式2022-10-30T00:00:00+02:00。
解决方案
1. 正确解析带时区的日期字符串
显式指定日期格式,确保pandas准确解析包含AM/PM及时区偏移的字符串:
import pandas as pd df = pd.DataFrame(['10/30/2022 7:00:00 AM +01:00', '10/31/2022 12:00:00 AM +01:00', '10/30/2022 3:00:00 PM +01:00', '10/30/2022 9:00:00 PM +01:00', '10/30/2022 5:00:00 PM +01:00', '10/30/2022 10:00:00 PM +01:00', '10/30/2022 3:00:00 AM +01:00', '10/30/2022 2:00:00 AM +02:00', '10/30/2022 10:00:00 AM +01:00', '10/30/2022 4:00:00 PM +01:00', '10/30/2022 1:00:00 AM +02:00'], columns = ['Date']) # 解析日期,指定匹配格式 df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y %I:%M:%S %p %z')
这里的format参数对应你的日期结构:
%m:两位月份%d:两位日期%Y:四位年份%I:12小时制的小时数%M:分钟%S:秒%p:AM/PM标识%z:时区偏移(如+01:00)
2. 转换到目标时区(统一为+02:00)
如果要将所有日期统一转换到UTC+2时区,使用tz_convert:
# 转换到+02:00时区 df['Date'] = df['Date'].dt.tz_convert('+02:00')
3. 格式化为目标ISO字符串
使用dt.isoformat()直接生成符合要求的格式,无需手动拼接时区:
df['Date'] = df['Date'].dt.isoformat()
最终结果
执行完上述步骤后,df['Date']的输出会是类似2022-10-30T06:00:00+02:00的格式,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Herwini
相关产品推荐
相关产品推荐

