pandas dataframe resample每天没有日期时间索引

时间:2016-06-15 17:42:59

标签: python pandas dataframe time-series

我在以下形式的pandas中有一个数据框:

      timestamps         light
7   2004-02-28 00:58:45 150.88
26  2004-02-28 00:59:45 143.52
34  2004-02-28 01:00:45 150.88
42  2004-02-28 01:01:15 150.88
59  2004-02-28 01:02:15 150.88

请注意,索引不是时间戳列。但我想重新采样(或以某种方式对数据进行分区)以反映每分钟,每小时,每天等光柱的平均值。我已经研究了pandas提供的resample方法,它需要数据帧到有一个数据时间索引的方法工作(除非我误解了这一点)。

  1. 所以我的第一个问题是,我可以重新索引数据帧以将时间戳作为索引(请注意,并非每行都有唯一的时间戳,并且对于每个时间戳,大约有30行具有相同的时间戳,每个代表一个传感器)。

  2. 如果没有,是否还有其他方法可以实现另一个数据帧,该数据帧具有每小时,每天,每月等的平均光照值。?

  3. 任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:6)

你是对的 - 需要DatetimeIndexTimedeltaIndexPeriodIndex其他错误:

  

TypeError:仅对DatetimeIndex,TimedeltaIndex或PeriodIndex有效,但得到了' Index'

的实例

如果原始index很重要,那么您必须先reset_indexset_index

print (df.reset_index().set_index('timestamps'))
                     index   light
timestamps                        
2004-02-28 00:58:45      7  150.88
2004-02-28 00:59:45     26  143.52
2004-02-28 01:00:45     34  150.88
2004-02-28 01:01:15     42  150.88
2004-02-28 01:02:15     59  150.88

如果不仅set_index

print (df.set_index('timestamps'))
                      light
timestamps                 
2004-02-28 00:58:45  150.88
2004-02-28 00:59:45  143.52
2004-02-28 01:00:45  150.88
2004-02-28 01:01:15  150.88
2004-02-28 01:02:15  150.88

然后resample

print (df.reset_index().set_index('timestamps').resample('1D').mean())
            index    light
timestamps                
2004-02-28   33.6  149.408

答案 1 :(得分:0)

对于Pandas 0.19.0及更高版本,您可以使用on关键字:

df.resample('H', on='timestamps').mean()

结果:

                      light
timestamps                 
2004-02-28 00:00:00  147.20
2004-02-28 01:00:00  150.88

答案 2 :(得分:0)

这是重新采样的方法

您可以使用以下方法以T间隔进行采样。

如果每个minute中都有原始数据,则新的重采样数据将以2 min间隔。 您可以使用3T, 4T....满足您需要的任何T值。

df_2T = df.resample('2T', on = 'timestamp').mean()

每小时一次 df_hourly = df.resample('60T', on = 'timestamp').mean()

每天 df_daily = df.resample('1440T', on = 'timestamp').mean()

注意:一天有60 * 24 = 1440分钟