gpt4 book ai didi

python - 从 CSV 文件读取时,pandas 如何处理时区?

转载 作者:行者123 更新时间:2023-12-04 19:31:12 34 4
gpt4 key购买 nike

在我的 CSV 文件中,我有以下条目:

Local time,Open,High,Low,Close,Volume
01.01.2015 00:00:00.000 GMT+0100,1.20976,1.20976,1.20976,1.20976,0
01.01.2015 00:01:00.000 GMT+0100,1.20976,1.20976,1.20976,1.20976,0
01.01.2015 00:02:00.000 GMT+0100,1.20976,1.20976,1.20976,1.20976,0
01.01.2015 00:03:00.000 GMT+0100,1.20976,1.20976,1.20976,1.20976,0

第一列包含特定时区 ( GMT+01 ) 中的日期时间。

我使用以下命令读取 CSV 文件:
df = pd.read_csv(csv, sep = ',', parse_dates = ['Local time'])

结果我得到以下信息:
0   2015-01-01 01:00:00 1.20976 1.20976 1.20976 1.20976 0.0
1 2015-01-01 01:01:00 1.20976 1.20976 1.20976 1.20976 0.0
2 2015-01-01 01:02:00 1.20976 1.20976 1.20976 1.20976 0.0
3 2015-01-01 01:03:00 1.20976 1.20976 1.20976 1.20976 0.0
4 2015-01-01 01:04:00 1.20976 1.20976 1.20976 1.20976 0.0

如我们所见,时间戳已被修改(已添加一小时)。我的解释是时间已经转换为 UTC时区。但是,我不确定,因为根据谷歌的说法:

GMT+01 is a time offset that adds 1 hour to Greenwich Mean Time (GMT).



所以,时间在 GMT+01应该比 UTC 大 1 小时.所以,在 UTC应该提前一小时。所以, 00:00 , 应该变成 23:00而不是 01:00 .

我在哪里解释错误?

已添加

我和 Pandas 玩了一会儿 to_datetime功能。看起来这是上述行为的原因。

如果我将它应用到与我的 CSV 格式相同的时间:
pd.to_datetime('01.01.2015 00:00:00.000 GMT+0100')

然后我得到相同的结果:
Timestamp('2015-01-01 01:00:00')

因此,如您所见,增加了 1 小时(和以前一样)。

但是,如果我将其应用于稍微修改的格式(我认为是相同的):
pd.to_datetime('01.01.2015 00:00:00.000+01:00')

然后我得到另一个结果:
Timestamp('2014-12-31 23:00:00')

总结一下, GMT+0100+01:00被区别对待。这是为什么?我误解了什么吗?

添加 2

所以,它看起来是关于 python 如何处理时区的。如果我执行这个命令:
pd.to_datetime('01.01.2015 00:00:00.000').tz_localize('Etc/GMT+5').tz_convert('GMT')

我明白了:
Timestamp('2015-01-01 05:00:00+0000', tz='GMT')

我希望在 GMT+5时区,时间比 GMT 大 5 小时.所以,在 GMT+5应该更晚。然而,看起来情况正好相反。但为什么?

当我玩这个网站时: https://time.is/GMT+5 ,我确实看到 GMT+5 比 GMT 多 5 个小时。

增加 3

来自 documentation on the timezones我懂了:

The 'Etc/GMT*' time zones mentioned above provide fixed offset specifications, but watch out for the counter-intuitive sign convention.



所以,看起来他们对待唱歌是违反直觉的。看起来我找到了一个解决方案,但现在我不确定如何在我的 CSV 中处理“GMT+0100”(它与 Python 无关),它只是从网站上下载的。是否有关于什么的标准约定 GMT+0100方法?

最佳答案

pandas 依赖于您的计算机语言环境和一些启发式方法。如果日期时间很奇怪,请指定确切的格式。

df = pd.read_csv(csv)
pd.to_datetime(df['Local time'], format='%d.%m.%Y %H:%M:%S.%f GMT%z')

0 2015-01-01 00:00:00+01:00
1 2015-01-01 00:01:00+01:00
2 2015-01-01 00:02:00+01:00
3 2015-01-01 00:03:00+01:00
Name: Local time, dtype: datetime64[ns, pytz.FixedOffset(60)]

许多函数不适用于时区感知日期时间,因此您可能希望将所有内容转换为单个时区,然后完全删除时区:
pd.to_datetime(df['Local time'], format='%d.%m.%Y %H:%M:%S.%f GMT%z') \
.dt.tz_convert('America/New_York') \
.dt.tz_localize(None)

关于python - 从 CSV 文件读取时,pandas 如何处理时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57204320/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com