【问题标题】:How to Create a Series with a Range of Weeks?如何创建具有周范围的系列?
【发布时间】:2018-10-03 17:48:13
【问题描述】:

我希望从现在开始创建最近 6 个工作周的列表。

我目前拥有的是:

import datetime
cww = datetime.datetime.now().isocalendar()[1]
cy = datetime.datetime.now().isocalendar()[0]
l6ww = [str(cy)[2:]+'WW'+str(w) for w in range(cww-5,cww+1)]

print l6ww

['18WW35', '18WW36', '18WW37', '18WW38', '18WW39', '18WW40']

这将持续到明年的第一个 WW。我可以想出几种蛮力的方法来解决这个问题,但想要更优雅的东西。

【问题讨论】:

  • 您尝试过使用 pandas (pandas.pydata.org) 吗?这是一个功能强大的库,当然可以优雅地做到这一点。

标签: python datetime series


【解决方案1】:

你可以使用datetime.timedelta():

import datetime

now = datetime.datetime.now().isocalendar()

l6ww = [(datetime.datetime.now() - datetime.timedelta(weeks=x)).isocalendar() for x in range(6)]

final = [str(i[0])[2:] + 'WW' + str(i[1]) for i in l6ww][::-1]

产量:

['18WW35', '18WW36', '18WW37', '18WW38', '18WW39', '18WW40']

即使您进入新的一年,无论是向前 x 周还是过去 x 周,这仍然有效。您也可以稍微修改此代码以继续前进:

l6ww = [(datetime.datetime.now() + datetime.timedelta(weeks=x)).isocalendar() for x in range(15)]

final = [str(i[0])[2:] + 'WW' + str(i[1]) for i in l6ww]

产量:

['18WW40', '18WW41', '18WW42', '18WW43', '18WW44', '18WW45', '18WW46', '18WW47', '18WW48', '18WW49', '18WW50', '18WW51', '18WW52', '19WW1', '19WW2']

【讨论】:

  • 太棒了。谢谢。
  • 这不是错误,您可以在 ISO 周日期中获得第 53 周:en.wikipedia.org/wiki/ISO_week_date
  • 一个小修改。将 str(i[1]) 更改为 str(i[1]).zfill(2)。我匹配的数据库使用前导零的 2 位数周数。
猜你喜欢
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多