使用python从excel文件转换大量时间戳的时区

时间:2018-05-02 14:41:18

标签: python excel timezone timestamp

我有一个名为“hello.xlsx”的excel文件。有一列时间戳有很多行(现在超过80,000行)。该文件基本上如下所示:

03/29/2018 19:24:50

03/29/2018 19:24:59

03/29/2018 19:24:59

03/29/2018 19:25:02

03/29/2018 19:25:06

03/29/2018 19:25:10

03/29/2018 19:25:20

03/29/2018 19:25:27

03/29/2018 19:25:27

03/29/2018 19:25:36

03/29/2018 19:25:49

等等......

这些时间戳是UTC时间,我需要将它们转换为美国太平洋时间(UTC,-7)。

我在网上搜索并试图在excel中使用一些公式,但未能使其正确。然后我写了一段代码,如下所示:

df = pd.read_excel('hello1.xlsx', header=None)

df[0] = pd.to_datetime(df[0]).dt.astimezone(timezone('US/Pacific'))

df.to_excel('out.xlsx', index=False, header=False)

我尝试过运行它,但似乎有问题。我想我需要更改或添加一些代码的第二行。我对python很新,我希望有人可以帮我解决这个问题,我真的很感激。 :)

2 个答案:

答案 0 :(得分:1)

在Excel(以及许多其他数据软件)中,时间数据保持为小数,整数部分为一天,浮动部分为一天的比率。所以你基本上可以减去7/24(这是Excel的7小时时间数据格式),以便将一个值从UTC转换为UTC,-7

例如,当您的时间数据位于A1时,请尝试将以下公式写入A2

=A1-(7/24)

编辑格式:

为了将制定的单元格视为日期/时间,我们应该相应地更改其格式。以下格式适用于此案例: enter image description here

答案 1 :(得分:0)

如果你想采用Python的方式,你必须使用apply方法,并在转换前将时间分配为UTC时间:

import pytz
df[0] = df[0].apply(lambda x: x.replace(tzinfo=pytz.utc).astimezone(pytz.timezone('US/Pacific')).replace(tzinfo=None))

lambda操作有三件事:

  1. 将时间记录的时区设置为UTC。
  2. 转换为美国/太平洋地区。
  3. 回到天真的时光。您需要执行此步骤才能导出到Excel。否则,Python将抛出错误。
  4. 您的df将如下所示:

                         0
    0  2018-03-29 12:24:50
    1  2018-03-29 12:24:59
    2  2018-03-29 12:24:59
    3  2018-03-29 12:25:02
    4  2018-03-29 12:25:06
    5  2018-03-29 12:25:10
    6  2018-03-29 12:25:20
    7  2018-03-29 12:25:27
    8  2018-03-29 12:25:27
    9  2018-03-29 12:25:36
    10 2018-03-29 12:25:49