使用python从excel文件中转换大量时间戳的时区
我有一个名为“hello.xlsx”的excel文件。有一列时间戳有很多行(目前超过80000行)。该文件基本上如下所示: 2018年3月29日19:24:50 2018年3月29日19:24:59 2018年3月29日19:24:59 2018年3月29日19:25:02 2018年3月29日19:25:06 2018年3月29日19:25:10 2018年3月29日19:25:20 2018年3月29日19:25:27 2018年3月29日19:25:27 2018年3月29日19:25:36 2018年3月29日19:25:49 等等 这些时间戳是UTC时间,我需要将它们转换为美国太平洋时间(UTC,-7) 我在网上搜索并尝试在excel中使用一些公式,但未能正确使用。然后我写了一段代码,如下所示:使用python从excel文件中转换大量时间戳的时区,python,excel,timezone,timestamp,Python,Excel,Timezone,Timestamp,我有一个名为“hello.xlsx”的excel文件。有一列时间戳有很多行(目前超过80000行)。该文件基本上如下所示: 2018年3月29日19:24:50 2018年3月29日19:24:59 2018年3月29日19:24:59 2018年3月29日19:25:02 2018年3月29日19:25:06 2018年3月29日19:25:10 2018年3月29日19:25:20 2018年3月29日19:25:27 2018年3月29日19:25:27 2018年3月29日19:25:3
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非常陌生,希望有人能帮我解决这个问题,我非常感谢。:) 在Excel(以及许多其他数据软件)中,时间数据以小数形式保存,整数部分为一天,浮动部分为一天的比率。因此,您基本上可以减去7/24(在Excel的时间数据格式中为7小时),以便将UTC值转换为UTC,-7
例如,当您的时间数据位于A1
,请尝试将以下公式写入A2
:
=A1-(7/24)
编辑格式:
为了将公式化的单元格视为日期/时间,我们应该相应地更改其格式。以下格式适用于这种情况:
如果要采用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操作执行3项操作:
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
嗨,哈坎,谢谢你的回复。我试过你的公式,结果是一系列的整数和浮点,比如'43172.32713'。实际上我希望它是日期格式的。你有什么想法吗@哈坎·埃尔多安·斯考克·恩普尔,谢谢你的回复!我尝试了你的方法,但有一个问题显示:“TypeError:replace()不接受关键字参数”。希望你能弄明白。“)@Scratch'N”Purr@liule123您可能必须首先将记录转换为datetime。当我创建一个测试excel文件时,pandas自动将字符串识别为datetime。因此,第一次运行
d[0]=pd.to_datetime(d[0],format=“%m/%d/%Y%H:%m:%S”)
,然后运行apply
行。我试过了,问题解决了。谢谢!~@Scratch'N'Purr