Как преобразовать столбцы в фрейме данных во временные ряды?

#python #pandas #dataframe #datetime

#python #панды #фрейм данных #дата и время

Вопрос:

Итак, я выбрал 3 столбца из своего фрейма данных, чтобы создать временной ряд, который я мог бы затем построить:

 booking_date = pd.DataFrame({'day': hotel_bookings_cleaned["arrival_date_day_of_month"],
                             'month': hotel_bookings_cleaned["arrival_date_month"],
                             'year': hotel_bookings_cleaned["arrival_date_year"]})
  

и результат выглядит так:

 day month   year
0   1   July    2015
1   1   July    2015
2   1   July    2015
3   1   July    2015
4   1   July    2015
  

Я попытался использовать

 dates = pd.to_datetime(booking_date)
  

но получил сообщение об ошибке

 ValueError: Unable to parse string "July" at position 0
  

Я предполагаю, что мне нужно преобразовать столбец месяца в числовое значение, прежде чем я смогу преобразовать его в datetime, но я не смог заставить работать какие-либо анализаторы.

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

1. но я не смог заставить работать какие-либо анализаторы. Можете ли вы поделиться соответствующим кодом?

Ответ №1:

Попробуйте это

 dates = pd.to_datetime(booking_date.astype(str).agg('-'.join, axis=1), format='%d-%B-%Y')

Out[13]:
0   2015-07-01
1   2015-07-01
2   2015-07-01
3   2015-07-01
4   2015-07-01
dtype: datetime64[ns]
  

Ответ №2:

Не уверен, что это более эффективно, чем предыдущий ответ, но вы можете преобразовать свой столбец string в целые числа с сопоставлением словаря, чтобы соответствовать формату, который pandas ожидает в to_datetime()

 month_map = {
'January':1,
'February':2,
'March':3,
'April':4,
'May':5,
'June':6,
'July':7,
'August':8,
'September':9,
'October':10,
'November':11,
'December':12
}

dates = pd.DataFrame({
    'day':booking_date.day,
    'month':booking_date.month.apply(lambda x: month_map[x]),
    'year':booking_date.year
})
ts = pd.to_datetime(dates)