Как извлечь время суток (pd.Timedelta или datetime.time) из Datetime?

#pandas #datetime #timedelta

#pandas #дата и время #timedelta

Вопрос:

Укажите фрейм данных, содержащий столбцы с pd.Datetime , например:

 import pandas as pd
df = pd.DataFrame({
    'name': ['Alice', 'Bob'],
    'starttime': ['2020-03-20 15:05:00', '2020-03-20 15:16:00'],
})
df['starttime'] = pd.to_datetime(df['starttime'])
  

Как мне правильно получить время суток как pd.TimeDelta ?

Я знаю, что можно извлечь python datetime.time с помощью df['starttime'].dt.time , но это мне не помогает, так как я хочу использовать типы данных pandas (т. Е. pd.TimeDelta ), Чтобы сравнения времени были понятными (мне нужно сделать много сравнений, и я ищу чистый код). Например, df['starttime'].dt.time > pd.TimeDelta(13:00) не будет работать. Он выдает ошибку TypeError: Cannot compare type Timedelta with type time , что имеет смысл.

У меня было две идеи о том, как этого добиться:

  1. df['starttime'] - df['starttime'].dt.floor('1D') : это выглядит «прилично», но я не уверен в последствиях. Я сомневаюсь, что он будет контролировать те два дня в году, в которые меняется время, то есть летнее и зимнее время. Я хочу просто игнорировать эти дни, 11 утра — это 11 утра, независимо от дня года

  2. pd.to_datetime(df['starttime'].dt.time.astype(str) : это выглядит банально, но я думаю, что это дает мне то, что я хочу.

Подходят ли эти методы? Есть ли способ на самом деле представить Время в pandas? Для того, что я вижу, есть Datetime , Timedelta и Timestamp .

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

1. Поскольку вы работаете с изменениями времени, не следует ли вам добавить часовой пояс в свои данные?

2. Думаю, я слишком упростил проблему в своем примере

3. вы могли бы преобразовать временную часть столбца datetime в строку, а затем в timedelta, например pd.to_timedelta(df['starttime'].dt.time.astype(str)) , поможет ли это?

4. да, это мой второй вариант (см. Вопрос в конце), но мне интересно, правильно ли это? Мне это кажется немного хакерским