问题描述
我希望从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])
有效并且更快。