[英]Resampling in Pandas is thrown off by daylight savings time
我有一个数据集,它标记了四年来每分钟发生的事件。 这是一个示例:
In [547]: result
Out[547]:
uuid timestamp col1 col2 col3
0 100 2016-03-30 00:00:00+02:00 NaN NaN NaN
1 100 2016-03-30 00:01:00+02:00 NaN NaN NaN
2 100 2016-03-30 00:02:00+02:00 NaN NaN NaN
3 100 2016-03-30 00:03:00+02:00 1.49 1.79 0.979
4 100 2016-03-30 00:04:00+02:00 NaN NaN NaN
... ... ... .. ...
1435 100 2016-03-30 23:55:00+02:00 NaN NaN NaN
1436 100 2016-03-30 23:56:00+02:00 1.39 2.19 1.09
1437 100 2016-03-30 23:57:00+02:00 NaN NaN NaN
1438 100 2016-03-30 23:58:00+02:00 NaN NaN NaN
1439 100 2016-03-30 23:59:00+02:00 NaN NaN NaN
[1440 rows x 5 columns]
每次出现非空白行时,我都会尝试获取摘要统计信息,并每六个小时获取一次这些统计信息。 为此, resample()
function 效果很好。 这是一个示例:
In [548]: result = result.set_index('timestamp').tz_convert('Europe/Berlin').resample('6h', label='right', closed='right', origin='start_day').agg(['mean', 'last', 'count']).iloc[:,-9:]
Out[548]:
col1_mean col1_last ... col3_last times_changed
timestamp ...
2016-03-30 00:00:00+02:00 NaN NaN ... NaN 0
2016-03-30 07:00:00+02:00 1.0690 1.069 ... 1.279 1
2016-03-30 13:00:00+02:00 1.0365 1.009 ... 1.239 4
2016-03-30 19:00:00+02:00 1.0150 0.989 ... 1.209 5
2016-03-30 01:00:00+02:00 1.1290 1.129 ... 1.329 1
[5 rows x 7 columns]
这看起来很棒,是我想要使用的格式。 但是,当我对所有数据(跨越多年)运行我的代码时,这里是 output 的摘录:
In [549]: result
Out[549]:
col1_mean col1_last ... col3_last times_changed
timestamp ...
2016-03-27 00:00:00+01:00 NaN NaN ... NaN 0
2016-03-27 07:00:00+02:00 1.0690 1.069 ... 1.279 1
2016-03-27 13:00:00+02:00 1.0365 1.009 ... 1.239 4
2016-03-27 19:00:00+02:00 1.0150 0.989 ... 1.209 5
2016-03-28 01:00:00+02:00 1.1290 1.129 ... 1.329 1
[5 rows x 7 columns]
新索引考虑了夏令时,并将所有内容都推迟了一个小时。 我希望新时间仍然在 0-6、6-12 等之间。
有没有办法强制我的数据集遵循 0–6、6–12 格式? 如果有一个额外的小时,也许从中得到的聚合仍然可以包含在 0-6 范围内?
我正在使用的时区是 Europe/Berlin,我尝试将所有内容转换为 UTC。 但是,值不在正确的日期或时间——例如,在 00:15 发生的事件将是前一天的 23:15,这会影响那些摘要统计信息。
有什么创造性的解决方案可以解决这个问题吗?
你试过这个吗? 我认为它应该可以工作(首先转换为本地时区,然后通过 .tz_localize(None) 截断时区信息)
result = result.set_index('timestamp').tz_convert('Europe/Berlin').tz_localize(None).resample('6h', label='right', closed='right', origin='start_day').agg(['mean', 'last', 'count']).iloc[:,-9:]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.