问题描述
我当前使用的起始日期格式为2019-09-04 16:00 UTC+3
,我正在尝试将其转换为日期时间格式为2019-09-04 16:00:00+0300
。
我认为可以使用的格式为format='%Y-%m-%d %H:%M %Z%z'
,但是运行它时会收到错误消息ValueError: Cannot parse both %Z and %z
。
有人知道要使用的正确格式吗,还是我应该尝试其他方法?谢谢。
我希望将数据框中的所有日期和时间更改为datetime格式。
这是我尝试使用的方法,该方法给我带来了一个错误
df['datepicker'] = pd.to_datetime(df['datepicker'],format='%Y-%m-%d %H:%M %Z%z')
这是我当前拥有的数据示例。
datepicker
2019-09-07 16:00 UTC+2
2019-09-04 18:30 UTC+4
2019-09-06 17:00 UTC±0
2019-09-10 16:00 UTC+1
2019-09-04 18:00 UTC+3
这就是我想要将它们转换为时间戳格式的方法。
datepicker
2019-09-07 16:00:00+0200
2019-09-04 18:30:00+0400
2019-09-06 17:00:00+0000
2019-09-10 16:00:00+0100
2019-09-04 18:00:00+0300
解决方法
当我定义如下时。它可以按您的预期工作。
from datetime import datetime,timedelta,timezone
UTC = timezone(timedelta(hours=+3))
dt = datetime(2019,1,12,tzinfo=UTC)
timestampStr = dt.strftime("%Y-%m-%d %H:%M %Z%z")
print(timestampStr)
输出为:
2019-01-01 12:00 UTC+03:00+0300
,
pandas.to_datetime
应该稍微调整一下字符串,才能愉快地进行解析:
import pandas as pd
df = pd.DataFrame({"datepicker":[ "2019-09-07 16:00 UTC+2","2019-09-04 18:30 UTC+4","2019-09-06 17:00 UTC±0","2019-09-10 16:00 UTC+1","2019-09-04 18:00 UTC+3"]})
df['datetime'] = pd.to_datetime(df['datepicker'].str.replace('±','+'))
# df['datetime']
# 0 2019-09-07 16:00:00-02:00
# 1 2019-09-04 18:30:00-04:00
# 2 2019-09-06 17:00:00+00:00
# 3 2019-09-10 16:00:00-01:00
# 4 2019-09-04 18:00:00-03:00
# Name: datetime,dtype: object
请注意,由于混合了UTC偏移量,列的数据类型为'object'(日期时间对象)。如果愿意,还可以立即转换为UTC,以获取dtype datetime [ns]的列:
df['UTC'] = pd.to_datetime(df['datepicker'].str.replace('±','+'),utc=True)
# df['UTC']
# 0 2019-09-07 18:00:00+00:00
# 1 2019-09-04 22:30:00+00:00
# 2 2019-09-06 17:00:00+00:00
# 3 2019-09-10 17:00:00+00:00
# 4 2019-09-04 21:00:00+00:00
# Name: UTC,dtype: datetime64[ns,UTC]