使用Pandas将360天日历转换为普通的Julian日历

时间:2016-03-01 11:56:26

标签: python pandas

我的pandas数据框看起来如下,每个月有30天。现在我想将这个数据帧转换为常规的Julian天日历,并在那些日期将NA设置为缺少日期(例如1/31/2001:NA等等)并稍后进行插值。任何人都可以建议我选择处理熊猫吗?

 Date   X    
1/1/2001    30.56787109
1/2/2001    29.57751465
1/3/2001    30.38424683
1/4/2001    28.64764404
1/5/2001    27.54763794
......
......
1/29/2001   27.44857788
1/30/2001   27.16296387
2/1/2001    28.02816772
2/2/2001    28.28137207
2/3/2001    28.38671875
.......
.......
02/29/2001  32.23730469
02/30/2001  32.56161499
3/1/2001    31.38146973
3/2/2001    30.73623657
3/3/2001    30.81912231
......
3/28/2001   33.7562561
3/29/2001   34.46350098
3/30/2001   33.49130249
4/1/2001    30.91223145
4/2/2001    30.94335938
.....
4/30/2001   30.02526855

......
......
12/29/2001  27.44161987
12/30/2001  28.43597412

2 个答案:

答案 0 :(得分:2)

所以,我假设您的Date列只是一个字符串而不是索引。而且我也用一个整数值替换X,以便更容易跟踪发生的事情。首先,转换为datetime,并设置为index。

>>> df.Date=pd.to_datetime(df.Date,errors='coerce')
>>> df = df.set_index('Date')

2001-02-27  10
2001-02-28  11
NaT         12
NaT         13
2001-03-01  14
2001-03-02  15

因此,使用内置时间感知的python / pandas来识别无效日期(非闰年2月29日和任何一年2月30日)。

然后您可以重新取样以将索引转到有效日历上。您还有一些填充选项(除了默认的NaN)和重新采样,或者您可以稍后进行插值。

>>> df=df.resample('d')

2001-01-29   3
2001-01-30   4
2001-01-31 NaN
2001-02-01   5
2001-02-02   6
...

2001-02-27  10
2001-02-28  11
2001-03-01  14
2001-03-02  15

答案 1 :(得分:0)

首先,将列类型设置为 pandas.Datetimeindex ,然后使用 to_julian_date()函数。然后,您可以使用 interpolate()方法来查找缺少的日期。

来源: