pandas - 重新采样 datetimeIndex 开始日期错误
问题描述
资源:
import pandas as pd
import numpy as np
cols = ['Date', 'Time', 'Load', 'Battery', 'Panel',
'Wind', 'Temp', 'Humidity', 'Volt']
data = pd.read_csv('test.csv',delimiter=';',header=0,names=cols,
decimal=',',parse_dates[[0,1]],
infer_datetime_format=True)
data.set_index('Date_Time',inplace=True)
我有这个数据框:
In [126]: data.head()
Out[126]:
Load Battery Panel Wind Temp Humidity Volt
Date_Time
2018-07-31 13:07:15 13.3 326.3 353.1 0.98 33.93 21.92 3.89
2018-07-31 13:08:15 14.0 314.4 342.5 0.59 33.88 21.84 3.88
2018-07-31 13:09:16 13.4 309.6 335.5 0.39 33.84 22.14 3.88
2018-07-31 13:10:16 13.8 285.1 313.8 2.55 33.71 23.18 3.88
2018-07-31 13:11:16 13.6 292.9 314.7 2.03 33.62 23.25 3.88
......
与其他 93000 行。从 2018 年 7 月 31 日到 2018 年 4 月 10 日。我想通过对每 10 分钟帧取值的总和来重新采样。所以我尝试了:
In [127]: data.resample('10min',closed='left',label='left').sum()
Out[127]:
Load Battery Panel Wind Temp Humidity Volt
Date_Time
2018-01-08 00:00:00 136.9 -140.6 -2.9 19.06 291.27 245.63 39.45
2018-01-08 00:10:00 137.3 -140.7 -3.1 15.14 290.62 244.88 39.42
2018-01-08 00:20:00 137.4 -140.4 -2.3 18.03 288.61 246.44 39.44
2018-01-08 00:30:00 137.5 -140.4 -2.2 12.61 286.97 246.83 39.43
这接近我的预期,但是“重新采样”会删除第一天的所有数据(我怀疑可能是因为该系列不是从午夜开始的),重新采样的正确方法是什么?有两个问题:
结果中缺少第一天,即删除了所有数据,重新采样的数据帧从 8 月 1 日开始,而不是 07/31 开始。
可以考虑从午夜开始的间隔,并且是 10 分钟的完美倍数(所以,对于 00:00、10:00、20:00 来说可以),但我希望第一个分组是:
2018-07-31 13:07:15 13.3 326.3 353.1 0.98 33.93 21.92 3.89
2018-07-31 13:08:15 14.0 314.4 342.5 0.59 33.88 21.84 3.88
2018-07-31 13:09:16 13.4 309.6 335.5 0.39 33.84 22.14 3.88
然后从 13:10:16 开始,当然是在数据集的第一天,而不是在第二天。好的。我使用以下方法解决了它:
x = data['2018-07-31'].resample('10min').sum()
y = data.resample('10min',closed='left',label='left').sum()
r = pd.concat([x,y])
但我认为这一定是重采样中的一种错误形式。
解决方案
对于恰好从 2018-07-31 13:07:15 开始的输出,您需要添加参数base
:“聚合间隔的起源”:文档。
示例代码:
start = pd.to_datetime('2018-07-31 13:07:15', format='%Y-%m-%d %H:%M:%S')
minutes = pd.date_range(start, start + timedelta(10), freq='min')
df = pd.DataFrame({'Date_Time': minutes, 'Load': np.random.randint(13, size=len(minutes))})
df.set_index('Date_Time', inplace=True)
df.resample('10min', closed='left', label='left', base=7.25).sum()
结果:
Date_Time Load
2018-07-31 13:07:15 11
2018-07-31 13:17:15 1
2018-07-31 13:27:15 6
推荐阅读
- iis - 如何使用 Microsoft Active Directory 证书服务更新证书
- mongodb - 如何在 MongoDB 中编写查询以代表 MongoDB 中的自定义 ID 搜索两个日期之间的数据
- javascript - 我如何在反应本机应用程序中保留数据?
- frequency - iCalendar 开放时间
- html - Outlook 电子邮件签名和超链接线颜色
- javascript - 如何在基于单选按钮的 onClick 事件中添加 if-else 语句
- javascript - 将 html 元素映射到 json 对象
- amazon-redshift - 当尝试使用 psycopg2 模块通过 python 连接到 redshift 时,会显示以下错误
- microsoft-graph-api - GraphAPI 通道创建导致隐藏通道
- swift - 状态返回内容更新奇怪的iOS13