#python #pandas #datetime
Вопрос:
Здравствуйте, я пытаюсь изменить даты моего фрейма данных в формат, который я могу использовать для извлечения полезной информации. Набор данных поставляется с функцией «неделя», которая представлена в виде ДД/ММ/ГГ следующим образом:
In [128]: df_train[['week', 'units_sold']]
Out[128]:
week units_sold
0 17/01/11 20
1 17/01/11 28
2 17/01/11 19
3 17/01/11 44
4 17/01/11 52
Я изменил даты следующим образом:
df_train['new_date'] = pd.to_datetime(df_train['week'])
new_date units_sold
0 2011-01-17 20.0
1 2011-01-17 28.0
2 2011-01-17 19.0
3 2011-01-17 44.0
4 2011-01-17 52.0
Используя созданную мной функцию «new_date», я сделал следующее для извлечения некоторой информации:
df_train['weekday'] = df_train['new_date'].dt.weekofyear #week day of the year
df_train['QTR'] = df_train['new_date'].apply(lambda x: x.quarter) #current quarter of the year
df_train['month'] = df_train['new_date'].apply(lambda x: x.month) #current month
df_train['year'] = df_train['new_date'].dt.year #current year
Однако при просмотре моих данных я сталкиваюсь с некоторыми ошибками. Например, определенная дата в моем наборе данных-07/02/11, которая должна переводиться в месяц 2. За исключением того, что мой анализ показывает, что месяц равен 7, что, как я знаю, неверно: см. запись 3483
Out[127]:
week month
18 17/01/11 1
1173 24/01/11 1
2328 31/01/11 1
3483 07/02/11 7
4638 14/02/11 2
Кто-нибудь может сказать мне, где я ошибся?
Любая помощь приветствуется!
Ответ №1:
Использовать dayfirst=True
параметр:
df_train['new_date'] = pd.to_datetime(df_train['week'], dayfirst=True)
А затем .dt
аксессуар для повышения производительности, потому что в приложении есть петли под капотом:
df_train['weekday'] = df_train['new_date'].dt.weekofyear #week day of the year
df_train['QTR'] = df_train['new_date'].dt.quarter #current quarter of the year
df_train['month'] = df_train['new_date'].dt.month #current month
df_train['year'] = df_train['new_date'].dt.year