python — комбинация год-неделя для обозначения конца или начала года

#python #datetime #strftime

#python #datetime #strftime

Вопрос:

Я хочу создать информацию YYYY_WW из дат (где WW — это номер недели). Я борюсь с окончаниями лет (beginnings), когда часть недели может попадать в соседний год:

 import datetime
import pandas as pd

# generate range of dates and extract YYYY_WW
dates_range = pd.date_range(start='2018-12-29', end='2019-01-02')
weeks = dates_range.strftime("%Y_%V")
print(weeks)

#Index(['2018_52', '2018_52', '2018_01', '2019_01', '2019_01'], dtype='object')
  

2018_01 очевидно, неверно. Есть какой-нибудь намек на простое обходное решение?

Комментарии:

1. Какого поведения вы хотите? Определение ISO, означающее, что 2018-12-31 приходится на 1-ю неделю 2019 года?

2. Мне нужно ['2018_52', '2018_52', '2019_01', '2019_01', '2019_01'] , которое должно соответствовать ISO, см., например, здесь

Ответ №1:

Вы ищете %G директиву:

Год ISO 8601 с веком, представляющим год, который содержит большую часть недели ISO (% V).

Подробнее смотрите Поведение strftime() и strptime().

Например:

 import datetime
import pandas as pd

dates_range = pd.date_range(start='2018-12-29', end='2019-1-2')
weeks = dates_range.strftime('%G_%V')
print(weeks)
# Index(['2018_52', '2018_52', '2019_01', '2019_01', '2019_01'], dtype='object')