使用pandas对python列表重新采样
这里对蟒蛇和熊猫来说是相当陌生的 我做了一个查询,返回了一个timeseries。我从不确定从查询中收到多少数据点(运行一天),但我知道的是,我需要对它们重新采样,以包含24个点(一天中每小时一个) 打印m3hstream提供使用pandas对python列表重新采样,python,pandas,resampling,Python,Pandas,Resampling,这里对蟒蛇和熊猫来说是相当陌生的 我做了一个查询,返回了一个timeseries。我从不确定从查询中收到多少数据点(运行一天),但我知道的是,我需要对它们重新采样,以包含24个点(一天中每小时一个) 打印m3hstream提供 [(1479218009000L, 109), (1479287368000L, 84)] 然后我尝试使用 df = pd.DataFrame(data = list(m3hstream), columns=['Timestamp', 'Value']) 这给了我一个
[(1479218009000L, 109), (1479287368000L, 84)]
然后我尝试使用
df = 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
但这给了我一个类型错误:仅对DatetimeIndex、TimedeltaIndex或PeriodIndex有效,但得到了一个“RangeIndex”实例
谁能告诉我如何重新取样,这样我在查询的24小时内每小时有1分
谢谢。让我们试试:
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()
- 您需要做的第一件事是将
转换为实际的'Timestamp'
。看起来是pd.Timestamp
毫秒
- 然后
,将重新采样
参数设置为打开
“时间戳”
如果要填充那些
NaN
值,请使用ffill
、bfill
或插值
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
这是输出:值时间戳1970-01-01 00:24:39.218009 109 1970-01-01 00:24:39.28736884@little.toblerone在to_DateTime中添加了units='ms',我运行了你的代码,它提供的输出与我在问题中发布的相同。我是不是做错了什么?如果你没有得到我发布的信息,那就有问题了。你在哪里运行这个?在iPython/Jupyter笔记本中?伊皮顿?控制台?,控制台。我使用的是PyCharm IDE,这是控制台中的打印输出。您是否运行这个,然后再打印
df
?或者您是否将其重新分配给df
,然后打印df
?基本上是您的代码后跟打印df。但这是用同样的方法。所以我认为这两种选择中的后一种。
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