Pandas: час возврата из столбца Datetime Directly
Предположим, у меня есть DataFrame sales
значений временной метки:
timestamp sales_office
2014-01-01 09:01:00 Cincinnati
2014-01-01 09:11:00 San Francisco
2014-01-01 15:22:00 Chicago
2014-01-01 19:01:00 Chicago
Я хотел бы создать новый столбец time_hour
. Я могу создать его, написав короткую функцию так и используя apply()
, чтобы применить его итеративно:
def hr_func(ts):
return ts.hour
sales['time_hour'] = sales['timestamp'].apply(hr_func)
Я бы увидел этот результат:
timestamp sales_office time_hour
2014-01-01 09:01:00 Cincinnati 9
2014-01-01 09:11:00 San Francisco 9
2014-01-01 15:22:00 Chicago 15
2014-01-01 19:01:00 Chicago 19
То, что я хотел бы достичь, - это более короткая трансформация, подобная этой (которая, как я знаю, ошибочна, но попадает в дух):
sales['time_hour'] = sales['timestamp'].hour
Очевидно, что столбец имеет тип Series
и как таковой не имеет этих атрибутов, но кажется, что существует более простой способ использования матричных операций.
Существует ли более прямой подход?
Ответы
Ответ 1
Предполагая, что метка времени является индексом фрейма данных, вы можете просто сделать
hours = sales.index.hour
Если вы хотите добавить это в свой кадр данных продаж, просто сделайте
import pandas as pd
pd.concat([sales, pd.DataFrame(hours, index=sales.index)], axis = 1)
Изменить:
Если у вас несколько столбцов объектов datetime, это тот же процесс. Если в вашем фреймворке есть столбец ['date'], и если предположить, что "дата" имеет значения даты и времени, вы можете получить доступ к часу с "даты" следующим образом:
hours = sales['date'].hour
Ответ 2
Для потомков: от 0.15.0 есть удобный .dt accessor, вы можете использовать, чтобы вытащить такие значения из серии datetime/period (в приведенном выше случае просто sales.timestamp.dt.hour
!
Ответ 3
Вы можете использовать выражение лямбда, например:
sales['time_hour'] = sales.timestamp.apply(lambda x: x.hour)
Ответ 4
Вы можете попробовать это:
sales['time_hour'] = pd.to_datetime(sales['timestamp']).dt.hour