当前位置:  开发笔记 > 编程语言 > 正文

将年份和年份转换为熊猫的日期时间索引

如何解决《将年份和年份转换为熊猫的日期时间索引》经验,为你挑选了2个好方法。

我有这个人.数据帧:

 year  doy
 2000   49   
 2000   65   
 2000   81   
 2001   97   
 2001  113   
 2001  129   
 2001  145   
 2001  161 

我想为这个数据帧创建一个索引.索引应该是日期时间索引.这是我在做的事情:

df.index = pandas.DatetimeIndex(df['doy'].apply(lambda x: date(2000, 1, 1)+ relativedelta(days=int(x)-1)))

但是,这会创建一个日期时间索引,该索引仅使用2000作为年份.我该如何解决这个问题?



1> Alex..:

您可以使用日期说明符%j来提取一年中的某一天.因此,结合两列,转移年份,并转换为日期时间!

pd.to_datetime(df['year'] * 1000 + df['doy'], format='%Y%j')

回报

0   2000-02-18
1   2000-03-05
2   2000-03-21
3   2001-04-07
4   2001-04-23
5   2001-05-09
6   2001-05-25
7   2001-06-10
dtype: datetime64[ns]



2> unutbu..:

您可以使用NumPy datetime64/timedelta64算法来查找所需的日期:

In [97]: (np.asarray(df['year'], dtype='datetime64[Y]')-1970)+(np.asarray(df['doy'], dtype='timedelta64[D]')-1)
Out[97]: 
array(['2000-02-18', '2000-03-05', '2000-03-21', '2001-04-07',
       '2001-04-23', '2001-05-09', '2001-05-25', '2001-06-10'], dtype='datetime64[D]')

由于日期的各个部分(例如年,月,日,周,小时等)的组成日期是一个常见的问题,这里有一个实用功能,可以使它更容易:

def compose_date(years, months=1, days=1, weeks=None, hours=None, minutes=None,
                 seconds=None, milliseconds=None, microseconds=None, nanoseconds=None):
    years = np.asarray(years) - 1970
    months = np.asarray(months) - 1
    days = np.asarray(days) - 1
    types = ('

产量

            doy  year
2000-02-18   49  2000
2000-03-05   65  2000
2000-03-21   81  2000
2001-04-07   97  2001
2001-04-23  113  2001
2001-05-09  129  2001
2001-05-25  145  2001
2001-06-10  161  2001

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有