2

我目前正在努力使用 pandas 0.8.0b1 的重新采样功能。

例如,当我尝试将(使用“平均值”)10 分钟值聚合为每月值时,该函数似乎使用一个月的最后一天数据作为下个月的平均值......

这是一个包含 3 个月 10 分钟数据的简单时间序列的示例

  • 2012 年 1 月:所有值 = 1
  • 2012 年 2 月:所有值 = 2
  • 2012 年 3 月:所有值 = 3

我使用 df.resample('M',how='mean') 获得的每月平均值是:

Out[454]: 

0
2012-01-31  1.000000
2012-02-29  1.965757
2012-03-31  2.967966
2012-04-30  3.000000

但我想得到类似的东西:

0
2012-02-01  1.000000
2012-03-01  2.000000
2012-04-01  3.000000

这是代码:

january = pd.date_range(pd.datetime(2012,1,1),pd.datetime(2012,1,31,23,50),freq='10min')
february = pd.date_range(pd.datetime(2012,2,1),pd.datetime(2012,2,29,23,50),freq='10min')
march = pd.date_range(pd.datetime(2012,3,1),pd.datetime(2012,3,31,23,50),freq='10min')
data_jan = np.zeros(size(january))+1
data_feb = np.zeros(size(february))+2
data_march = np.zeros(size(march))+3
df1 = pd.DataFrame(data_jan,index=january)
df2 = pd.DataFrame(data_feb,index=february)
df3 = pd.DataFrame(data_march,index=march)
df = pd.concat([df1,df2,df3])
df.resample('M',how='mean')

如果现在,我删除最后一天:

january = pd.date_range(pd.datetime(2012,1,1),pd.datetime(2012,1,31,00,00),freq='10min')
february = pd.date_range(pd.datetime(2012,2,1),pd.datetime(2012,2,29,00,00),freq='10min')
march = pd.date_range(pd.datetime(2012,3,1),pd.datetime(2012,3,31,00,00),freq='10min')

我得到(几乎)我想要的东西:

Out[474]: 
            0
2012-01-31  1
2012-02-29  2
2012-03-31  3

你可以帮帮我吗 ????是bug吗???

4

1 回答 1

3

这确实是一个错误,我有两个问题:

https://github.com/pydata/pandas/issues/1458

https://github.com/pydata/pandas/issues/1471

这应该在 pandas 0.8.0 发布之前修复。请注意,这可以正常工作:

In [15]: df.resample('M', kind='period')
Out[15]: 
          0
Jan-2012  1
Feb-2012  2
Mar-2012  3

编辑:刚刚在 git master 中修复了这个问题(上述两个参考问题都已关闭)

于 2012-06-14T17:05:15.500 回答