这里对python和pandas来说相当新。
我做了一个查询,它给了我一个时间序列。我不知道从查询中收到多少数据点(运行一天),但我知道的是我需要重新采样它们以包含24个点(当天每小时一个)。
打印m3hstream给出
[(1479218009000L, 109), (1479287368000L, 84)]
然后我尝试用
创建一个数据帧dfdf = pd.DataFrame(data = list(m3hstream), columns=['Timestamp', 'Value'])
这给了我一个输出
Timestamp Value
0 1479218009000 109
1 1479287368000 84
以下我这样做
daily_summary = pd.DataFrame()
daily_summary['value'] = df['Value'].resample('H').mean()
daily_summary = daily_summary.truncate(before=start, after=end)
print "Now daily summary"
print daily_summary
但是这给了我一个TypeError:只对DatetimeIndex,TimedeltaIndex或PeriodIndex有效,但得到了'RangeIndex'的实例
有谁能请让我知道如何重新取样,以便在我要查询的24小时内每小时有1分?
感谢。
答案 0 :(得分:2)
让我们试试:
daily_summary = daily_summary.set_index('Timestamp')
daily_summary.index = pd.to_datetime(daily_summary.index, unit='ms')
每小时一次:
daily_summary.resample('H').mean()
或每天一次:
daily_summary.resample('D').mean()
答案 1 :(得分:2)
'Timestamp'
转换为实际pd.Timestamp
。看起来好像是milliseconds
resample
参数设置为on
'Timestamp'
df = df.assign(
Timestamp=pd.to_datetime(df.Timestamp, unit='ms')
).resample('H', on='Timestamp').mean().reset_index()
Timestamp Value
0 2016-11-15 13:00:00 109.0
1 2016-11-15 14:00:00 NaN
2 2016-11-15 15:00:00 NaN
3 2016-11-15 16:00:00 NaN
4 2016-11-15 17:00:00 NaN
5 2016-11-15 18:00:00 NaN
6 2016-11-15 19:00:00 NaN
7 2016-11-15 20:00:00 NaN
8 2016-11-15 21:00:00 NaN
9 2016-11-15 22:00:00 NaN
10 2016-11-15 23:00:00 NaN
11 2016-11-16 00:00:00 NaN
12 2016-11-16 01:00:00 NaN
13 2016-11-16 02:00:00 NaN
14 2016-11-16 03:00:00 NaN
15 2016-11-16 04:00:00 NaN
16 2016-11-16 05:00:00 NaN
17 2016-11-16 06:00:00 NaN
18 2016-11-16 07:00:00 NaN
19 2016-11-16 08:00:00 NaN
20 2016-11-16 09:00:00 84.0
如果您想填充这些NaN
值,请使用ffill
,bfill
或interpolate
df.assign(
Timestamp=pd.to_datetime(df.Timestamp, unit='ms')
).resample('H', on='Timestamp').mean().reset_index().interpolate()
Timestamp Value
0 2016-11-15 13:00:00 109.00
1 2016-11-15 14:00:00 107.75
2 2016-11-15 15:00:00 106.50
3 2016-11-15 16:00:00 105.25
4 2016-11-15 17:00:00 104.00
5 2016-11-15 18:00:00 102.75
6 2016-11-15 19:00:00 101.50
7 2016-11-15 20:00:00 100.25
8 2016-11-15 21:00:00 99.00
9 2016-11-15 22:00:00 97.75
10 2016-11-15 23:00:00 96.50
11 2016-11-16 00:00:00 95.25
12 2016-11-16 01:00:00 94.00
13 2016-11-16 02:00:00 92.75
14 2016-11-16 03:00:00 91.50
15 2016-11-16 04:00:00 90.25
16 2016-11-16 05:00:00 89.00
17 2016-11-16 06:00:00 87.75
18 2016-11-16 07:00:00 86.50
19 2016-11-16 08:00:00 85.25
20 2016-11-16 09:00:00 84.00