【问题标题】:Resample time series data hourly with gaps每小时对时间序列数据进行重新采样,并有间隙
【发布时间】:2016-12-14 02:25:29
【问题描述】:

我有一个为期一年的数据集,其中包含每 15 分钟采样一次的日期和温度,Python 中的数据偶尔会出现间隙。我已将日期和温度保存到 pandas 的数据框中:

2015-08-21 09:35:47  27.928
2015-08-21 09:55:47  28.839
2015-08-21 10:15:47  28.495
...
2016-08-10 05:39:24  11.246
2016-08-10 05:59:24  11.912
2016-08-10 06:19:24  13.066

我想每隔一小时重新采样一次数据并尝试使用这一行:

 newDat=data.resample(rule='H')

我也尝试使用第一个和最后一个“如何”,但仍然没有得到我想要的东西。我的结果如下所示:

2015-08-21 09:00:00  28.383500
2015-08-21 10:00:00  27.959667
2015-08-21 11:00:00  29.513333
...
2016-08-10 06:00:00  14.235667
2016-08-10 07:00:00  20.867333
2016-08-10 08:00:00  26.725000

我不想改变实际的温度或时间值。我希望命令在一天中的每个小时内获取第一次,所以我得到如下内容:

2015-08-21 09:15:47  27.925
2015-08-21 10:15:47  28.495
2015-08-21 11:15:47  27.596
...
2016-08-10 07:19:24  16.944
2016-08-10 08:19:24  27.149
2016-08-10 09:19:24  28.152

【问题讨论】:

    标签: python pandas resampling


    【解决方案1】:

    DataFrame.groupby 方法可以接受一系列值作为组键。 序列的长度预计与DataFrame中的行数相同,对序列中等值项对应的行进行分组。

    因此您可以使用截断到最近小时的日期作为组键:

    In [133]: groupkey = data['date'].values.astype('datetime64[h]'); groupkey
    Out[133]: 
    array(['2015-08-21T09', '2015-08-21T09', '2015-08-21T10', '2016-08-10T05',
           '2016-08-10T05', '2016-08-10T06'], dtype='datetime64[h]')
    

    import pandas as pd
    Timestamp = pd.Timestamp
    data = pd.DataFrame({'date': [Timestamp('2015-08-21 09:35:47'), Timestamp('2015-08-21 09:55:47'), Timestamp('2015-08-21 10:15:47'), Timestamp('2016-08-10 05:39:24'), Timestamp('2016-08-10 05:59:24'), Timestamp('2016-08-10 06:19:24')], 'temp': [27.928000000000001, 28.839000000000002, 28.495000000000001, 11.245999999999999, 11.912000000000001, 13.065999999999999]}) 
    
    groupkey = data['date'].values.astype('datetime64[h]')
    result = data.groupby(groupkey).first().set_index('date')
    print(result)
    

    产量

                           temp
    date                       
    2015-08-21 09:35:47  27.928
    2015-08-21 10:15:47  28.495
    2016-08-10 05:39:24  11.246
    2016-08-10 06:19:24  13.066
    

    【讨论】:

    • 当我尝试使用 groupkey 行时,我得到 'ValueError: Could not convert object to NumPy datetime'。
    • 您使用的是哪个版本的 Numpy 和 Pandas? (检查np.__version__ 和pd.__version__)。另外,data['date'].values.dtype 是什么?
    • numpy 版本 '1.10.4' 和 pandas 版本 '0.17.1' 和 dtype('O')
    • dtype('O') 暗示data['date'] 可能是字符串(或者更糟糕的是,字符串、时间戳和其他东西的混合......)。要使用上面的代码,data['date'] 应该是一系列 dtype datetime64[ns]。要尝试将其转换为该 dtype,请使用 data['date'] = pd.to_datetime(data['date'])。如果成功,那么groupkey = data['date'].values.astype('datetime64[h]') 将起作用。
    猜你喜欢
    • 2014-12-15
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    相关资源
    最近更新 更多