将Days Int64转换为Date

时间:2018-04-15 10:24:27

标签: python pandas date datetime timedelta

我需要将以下数据框(天)转换为实际日期。当(天= 0)这是基准年01/01/1960。你能协助将日期栏(实际上是从160年1月1日起的几天)转换回日期吗?

df=pd.DataFrame([-730,-640,-549,457,-365,275,-184,-92,0,91,182,274,366],columns=['days'])
df['base_year']=datetime.date(1960,1,1)

2 个答案:

答案 0 :(得分:2)

回想起来,MaxU的答案更好。以下内容可能适用于较旧的Pandas版本。

有几种方法可以做到这一点。一个是使用datetime.timedelta列表理解:

from datetime import timedelta
import pandas as pd

>>> [pd.to_datetime('01/01/1960') + timedelta(d) for d in [-730,-640,-549,457,-365,275,-184,-92,0,91,182,274,366]]
[Timestamp('1958-01-01 00:00:00'),
 Timestamp('1958-04-01 00:00:00'),
 Timestamp('1958-07-01 00:00:00'),
 Timestamp('1961-04-02 00:00:00'),
 Timestamp('1959-01-01 00:00:00'),
 Timestamp('1960-10-02 00:00:00'),
 Timestamp('1959-07-01 00:00:00'),
 Timestamp('1959-10-01 00:00:00'),
 Timestamp('1960-01-01 00:00:00'),
 Timestamp('1960-04-01 00:00:00'),
 Timestamp('1960-07-01 00:00:00'),
 Timestamp('1960-10-01 00:00:00'),
 Timestamp('1961-01-01 00:00:00')]

所以你可以使用

>>> DataFrame([pd.to_datetime('01/01/1960') + timedelta(d) for d in [-730,-640,-549,457,-365,275,-184,-92,0,91,182,274,366]],columns=['days'])
    days
0   1958-01-01
1   1958-04-01
2   1958-07-01
3   1961-04-02
4   1959-01-01
5   1960-10-02
6   1959-07-01
7   1959-10-01
8   1960-01-01
9   1960-04-01
10  1960-07-01
11  1960-10-01
12  1961-01-01

答案 1 :(得分:2)

您可以使用相对较新的功能(在Pandas 0.20.0中添加) - origin pd.to_datetime()

In [44]: df['date'] = pd.to_datetime(df['days'], origin='1960-01-01', unit='D')

In [45]: df
Out[45]:
    days       date
0   -730 1958-01-01
1   -640 1958-04-01
2   -549 1958-07-01
3    457 1961-04-02
4   -365 1959-01-01
5    275 1960-10-02
6   -184 1959-07-01
7    -92 1959-10-01
8      0 1960-01-01
9     91 1960-04-01
10   182 1960-07-01
11   274 1960-10-01
12   366 1961-01-01

来自docs

  

来源:标量,默认为'unix'

     

定义参考日期。数值将被解析为   自此参考日期以来的单位数量(由单位定义)。

     

如果是'unix'(或POSIX)时间;原点设定为1970-01-01。若'朱利安',   单位必须为'D',原点设置为儒略历的开头。

     

Julian day number 0分配给从1月中午开始的那天

     公元前4713年1。如果Timestamp可转换,则将origin设置为Timestamp   由原产地确定。