重新采样熊猫0.8的漏洞?

时间:2012-06-13 15:19:53

标签: python pandas resampling

我目前正在努力使用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
你可以帮我吗????这是一个错误???

1 个答案:

答案 0 :(得分: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中解决了这个问题(以上两个参考问题都已关闭)