我有这个人.数据帧:
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作为年份.我该如何解决这个问题?
您可以使用日期说明符%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]
您可以使用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