【问题标题】:What is the datetime equivalent for pandas dayofyear?pandas dayofyear 的日期时间等价物是多少?
【发布时间】:2020-12-15 22:28:02
【问题描述】:

我正在寻找从datetimes 列表中获取一年中某一天的值的数组。例如,我可以使用isocalendar 方法获取周数。但是一年中整数天的方法是什么?使用 pandas 这是 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,1,1), 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])。

【问题讨论】:

  • this 有帮助吗?
  • @anky 我不这么认为,np.array([datetime.timetuple().tm_yday for datetime in datetimes]) 返回一个空数组array([], dtype=float64)
  • 问题中的输入 - datetimes 返回空白
  • 抱歉打错了

标签: python pandas numpy datetime


【解决方案1】:

以下是日期之间天数的简短示例,仅使用 Python 内置的 datetime 模块:

import datetime

dates = [
    datetime.date(2019, 12, 30), datetime.date(2019, 12, 31),
    datetime.date(2020, 1, 1),   datetime.date(2020, 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 的索引(在此示例中,1 月 1 日是“第 0 天”),您可以将 1 添加到 days_between。

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

【讨论】:

    【解决方案2】:

    尝试使用 strftime:

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

    然而,

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

    工作且速度更快。

    【讨论】:

      猜你喜欢
      • 2016-11-25
      • 2016-06-17
      • 2010-09-12
      • 2020-02-28
      • 1970-01-01
      • 2017-01-15
      • 2010-12-31
      • 1970-01-01
      • 2020-07-21
      相关资源
      最近更新 更多