Преобразование столбцов «год» и «неделя года» в «дату» в Pandas - PullRequest
2 голосов
/ 18 марта 2019

желаемый путь

Чтобы преобразовать два столбца с годом и неделей года в дату, я хотел бы сделать что-то вроде:

df['formatted_date'] = df.year*100+df.weekofyear
df['date'] = pd.to_datetime(df['formatted_date'], format='%Y%w')

Однако, это не работает, давая ValueError :

ValueError: unconverted data remains: 01

Обход

Обходной путь, который я нашел, - это преобразование недели года в день года и работа с year-dayofyear %Y%j формат:

df['formatted_date'] = df.year*1000+df.weekofyear*7-6 
df['date'] = pd.to_datetime(df['formatted_date'], format='%Y%j')

Первая строка становится некрасивой, но это прекрасно работает. Неделя года находится в диапазоне (00,53). Любые идеи, почему элегантный способ не работает?

1 Ответ

3 голосов
/ 18 марта 2019

Вам нужно объединить %w для дня недели - объяснение с %W для недели:

http://strftime.org/ для %W:

Номер недели в году (понедельник - первый день недели) в виде десятичного числа.Все дни в новом году, предшествующем первому понедельнику, считаются неделей 0.

И для %w:

День недели в виде десятичного числа, где 0воскресенье, а 6 суббота.


df = pd.DataFrame({'year':[2015, 2018],
                   'weekofyear':[10,12]})

dates = df.year*100+df.weekofyear
@adde
df['date'] = pd.to_datetime(dates.astype(str) + '0', format='%Y%W%w')
print (df)

   year  weekofyear  formatted_date       date
0  2015  10          201510         2015-03-15
1  2018  12          201812         2018-03-25

Другое решение:

#added 0 only for demontration, you can remove it
df['formatted_date'] = df.year * 1000 + df.weekofyear * 10 + 0
df['date'] = pd.to_datetime(df['formatted_date'], format='%Y%W%w')
print (df)

   year  weekofyear  formatted_date       date
0  2015  10          2015100        2015-03-15
1  2018  12          2018120        2018-03-25
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...