熊猫数据框每天重新采样,没有日期时间索引
Posted
技术标签:
【中文标题】熊猫数据框每天重新采样,没有日期时间索引【英文标题】:pandas dataframe resample per day without date time index 【发布时间】:2016-10-16 23:18:54 【问题描述】:我有一个如下形式的熊猫数据框:
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
方法,它要求数据框有一个该方法工作的数据时间索引(除非我误解了这一点)。
所以我的第一个问题是,我可以重新索引数据帧以将时间戳作为索引(请注意,并非每一行都有唯一的时间戳,对于每个时间戳,大约有 30 行具有相同的时间戳,每个代表一个传感器)。
如果没有,是否有其他方法可以实现另一个数据帧,该数据帧具有每小时、每天、每月等的平均值?
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:你是对的 - 需要 DatetimeIndex
、TimedeltaIndex
或 PeriodIndex
否则错误:
TypeError:仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但获得了 'Index' 的实例
因此,如果原始index
很重要,您必须首先使用reset_index
和set_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
【讨论】:
【参考方案2】:对于 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
【讨论】:
【参考方案3】:这是一种重新采样的方法。
您可以使用以下方法以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 分钟
【讨论】:
以上是关于熊猫数据框每天重新采样,没有日期时间索引的主要内容,如果未能解决你的问题,请参考以下文章