Pandas 重新采样datetimeIndex开始日期错误
资料来源: 我有这个数据框:Pandas 重新采样datetimeIndex开始日期错误,pandas,pandas-groupby,Pandas,Pandas Groupby,资料来源: 我有这个数据框: 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,
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)
其他93000行。从2018年7月31日至2018年4月10日。我想通过获取每10分钟帧的值的总和来重新采样。所以我试着:
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
......
这与我的预期接近,但“重采样”删除了我怀疑的第一天的所有数据,可能是因为该系列不是在午夜开始的,什么是进行重采样的正确方法?有两个问题:
结果中缺少第一天,即删除所有数据,重新采样的数据帧从8月1日开始,而不是从7月31日开始
P> >考虑在午夜开始的间隔是正确的,而且是10分钟的完美倍数,所以,00、10:00、20:00可以,但我预期第一个分组是:
然后从13:10:16开始,当然是在数据集的第一天,而不是第二天。
好啊我用以下方法解决了这个问题:
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:07:15开始的输出,您需要添加参数基:聚合间隔的起源: 示例代码:
x = data['2018-07-31'].resample('10min').sum()
y = data.resample('10min',closed='left',label='left').sum()
r = pd.concat([x,y])
结果:
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()
您的代码正如我所期望的那样工作,我并不真正需要基础,但我的代码不是以同样的方式工作的。也许现在我认为这取决于我从文件中读取数据的方式和索引日期的类型。我无法解释为什么,在我的例子中,代码不起作用。因此,我编辑了这个问题,从一开始就包含了所有代码。
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