Python / Pandas:将“Day of Year”整数转换为完整日期

mw3dktmi  于 2023-06-28  发布在  Python
关注(0)|答案(3)|浏览(117)

我知道使用DateTime对象,我可以提取一年中的数字日(例如:January 1st = 1,December 31st = 365)with .dayofyear like this:

some_datetime.dayofyear

有没有一种方法可以逆转这一点,并采取一个整数的dayofyear,并将其转换回一个完整的日期?
我搜索了日期时间,尝试了一些方法,但似乎都不起作用。

pbwdgjma

pbwdgjma1#

您可以:

df['date'] = df['days'].apply(lambda x: dt + pd.Timedelta(f'{x}D'))
print(df)

   days       date
0    32 2020-02-02
1   150 2020-05-30
2   200 2020-07-19

样本数据

# set some start date 
dt = pd.to_datetime('2020-01-01')
df = pd.DataFrame({'days': [32, 150, 200]})
8yparm6h

8yparm6h2#

一个有趣的替代方法是使用pandas的to_datetime()origin参数:

days = [32, 150, 200]
pd.to_datetime([d-1 for d in days], unit='D', origin=pd.Timestamp('01-01-2020'))

请确保减去一天,因为第一天已经在初始化中考虑。
Credits go there.

dly7yett

dly7yett3#

数据是否也包括年份?因为没有年份,你怎么解释闰年?闰年有366天,而不是365天,所以如果像其他任何一年一样对待,这一年将“溢出”,成为1月。一!
例如:

s['M-D'] = pd.to_datetime(
    s['day'],
    format='%Y %j'
   ).dt.strftime('%m-%d')

导致366被转换为“01- 01”。
然而,包括年工程如预期:

s['M-D'] = pd.to_datetime(
    ss['year'].astype(str) + ' ' + s['day'].astype(str),
    format='%Y %j'
   ).dt.strftime('%m-%d')

结果在2015-12-31当year=2015day=366.

相关问题