【发布时间】:2022-01-11 01:07:35
【问题描述】:
我有两个时间序列文件,它们位于 CET / CEST 中。其中不好的一个,没有以正确的方式写入值。对于好的 csv,请看这里:
#test_good.csv
local_time,value
...
2017-03-26 00:00,2016
2017-03-26 01:00,2017
2017-03-26 03:00,2018
2017-03-26 04:00,2019
...
2017-10-29 01:00,7224
2017-10-29 02:00,7225
2017-10-29 02:00,7226
2017-10-29 03:00,7227
...
...一切正常使用:
df['utc_time'] = pd.to_datetime(df[local_time_column])
.dt.tz_localize('CET', ambiguous="infer")
.dt.tz_convert('UTC').dt.strftime('%Y-%m-%d %H:%M:%S')
将 test_bad.csv 转换为 UTC 时,由于缺少 10 月的 2 个小时,我得到了 AmbiguousTimeError。
# test_bad.csv
local_time,value
...
2017-03-26 00:00,2016
2017-03-26 01:00,2017 # everything is as it should be
2017-03-26 03:00,2018
2017-03-26 04:00,2019
...
2017-10-29 01:00,7223
2017-10-29 02:00,7224 # the value of 2 am should actually be repeated PLUS 3 am is missing
2017-10-29 04:00,7226
2017-10-29 05:00,7227
...
有谁知道如何将时间序列文件转换为 UTC 并为新索引中缺少的日期添加 NaN 列的优雅方法?感谢您的帮助。
【问题讨论】:
-
要正确理解,您的第二个示例(“坏”数据)缺少条目,您想用 NaN 填充它们吗?另外,频率是否恒定(每小时)?
-
@MrFuppes,是的,我正在处理每小时数据。充其量,我想用相应的 CEST / CET 日期时间值填充缺失的条目,以便转换像第一个示例一样成功。
-
很遗憾,如果您没有记录时间是在转换之前还是之后,则无法可靠地解决歧义。 CSV 文件中是否缺少 #7225 或 Pandas 删除了它?
-
旁注,如果您格式化为来自 UTC 日期时间的字符串,请使用
'%Y-%m-%d %H:%M:%SZ'之类的格式传递该信息,其中 Z 表示 UTC。 -
@MarkRansom,初始文件中缺少值 2017-10-29 02:00(第二次出现)和 2017-10-29 03:00。他们没有被丢弃。我还考虑过只创建一个新的 CET 索引,然后重新索引,但是由于 10 月 DST 的重复值,我收到了无法重新索引的错误
标签: python pandas datetime pytz datetimeoffset