我在UTC
中有一列日期时间字符串,我需要使用EST
将其转换为pandas
中可行的日期时间格式。我已经成功地转换了该列,但是我觉得我的解决方法很困难,可以简化,但是我不确定如何解决。这是我目前转换日期的方式:
df['datetime'] = pd.to_datetime(df['datetime'])
df['datetime'] = df['datetime'].dt.strftime('%m/%d/%Y %H:%M:%S')
df['datetime'] = pd.to_datetime(df['datetime'])
df['datetime'] = df['datetime'] - pd.Timedelta(hours=5)
以下是原始字符串格式的一些示例:
2014-02-07T00:25:40Z
2014-02-07T00:25:40Z
2014-02-07T00:25:41Z
2014-02-07T00:25:42Z
2014-02-07T00:25:42Z
2014-02-07T00:25:43Z
2014-02-07T00:25:43Z
2014-02-07T00:25:44Z
2014-02-07T00:25:44Z
2014-02-07T00:25:44Z
我可以用一两行转换此列吗?我尝试在与日期时间格式相同的步骤中执行Timedelta()
,但收到错误。另外,我尝试使用tz_convert()
和tz_localize()
,但收到tz_convert()
的错误消息,说我的日期时间不是可行的日期时间格式(因此,为什么在格式化后将列重置为日期时间)。使用tz_localize()
,它只是将-5:00
添加到我的日期时间的末尾,而不是实际上从UTC
时间中减去5小时。
这是输出的外观:
2014-02-06 19:25:40
2014-02-06 19:25:40
2014-02-06 19:25:41
2014-02-06 19:25:42
2014-02-06 19:25:42
2014-02-06 19:25:43
2014-02-06 19:25:43
2014-02-06 19:25:44
2014-02-06 19:25:44
2014-02-06 19:25:44
答案 0 :(得分:1)
我会做tz_localize
和tz_localize
pd.to_datetime(df.date).dt.tz_localize('UTC').\
dt.tz_convert('EST').\
dt.strftime('%Y-%m-%d %H:%M:%S')
0 2014-02-06 19:25:40
1 2014-02-06 19:25:41
2 2014-02-06 19:25:42
3 2014-02-06 19:25:42
4 2014-02-06 19:25:43
5 2014-02-06 19:25:43
6 2014-02-06 19:25:44
7 2014-02-06 19:25:44
8 2014-02-06 19:25:44
Name: date, dtype: object