首页 文章

用pandas重新采样python列表

提问于
浏览
2

这里对蟒蛇和大熊猫来说相当新 .

我做了一个查询,它给了我一个时间序列 . 我不知道从查询中收到多少数据点(运行一天),但我知道的是我需要重新采样它们以包含24个点(当天每小时一个) .

打印m3hstream给出

[(1479218009000L, 109), (1479287368000L, 84)]

然后我尝试用数据帧df

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

但是这给了我一个TypeError:只对DatetimeIndex,TimedeltaIndex或PeriodIndex有效,但得到了一个'RangeIndex'的实例

有谁能请让我知道如何重新取样,所以我在24小时内每小时得1分,我要查询?

谢谢 .

2 回答

  • 2
    • 您需要做的第一件事是将 'Timestamp' 转换为实际 pd.Timestamp . 看起来像是 milliseconds

    • 然后 resampleon 参数设置为 '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 值,请使用 ffillbfillinterpolate

    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
    
  • 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()
    

相关问题