一年中熊猫的日期时间等于多少?

问题描述

我希望从datetimes列表中获取一年中某天的值数组。例如,可以使用方法isocalendar获取星期数。但是,一年中整数天的方法是什么?使用熊猫是dayofyear,但是如何使用datetime包来获取呢?

from datetime import timedelta,datetime
import numpy as np
import pandas as pd
from dateutil.relativedelta import *

datetimes = np.arange(
    datetime(2012,1,1),datetime(2017,timedelta(days=1)
    ).astype(datetime)

week_value_by_day = np.array([datetime.isocalendar()[1] for datetime in datetimes])

在一天结束时,我想要一个使用此代码np.array([datetime.<something> for datetime in datetimes])的数组,其中<something>给我一年中的整数天,结果为array([1,2,3,4,5,6..365])

解决方法

这里是一个使用日期内置日期的简短示例,仅使用Python内置的datetime模块:

import datetime

dates = [
    datetime.date(2019,12,30),datetime.date(2019,31),datetime.date(2020,1,1),2)
]

for d in dates:
    base_date = d.replace(month=1,day=1)
    days_between = (d - base_date) / datetime.timedelta(days=1)
    print(base_date,d,days_between)

2019-01-01 2019-12-30 363.0
2019-01-01 2019-12-31 364.0
2020-01-01 2020-01-01 0.0
2020-01-01 2020-01-02 1.0

如果要基于1的索引,则应在days_between上加1(在本示例中,1月1日为“第零天”)。

这基于此处的“用法示例:日期”部分: https://docs.python.org/3/library/datetime.html

,

尝试使用strftime:

np.array([int(i.strftime("%j")) for i in datetimes])

但是,

np.array([datetime.timetuple().tm_yday for datetime in datetimes])

有效并且更快。