#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
, что имеет смысл.
У меня было две идеи о том, как этого добиться:
-
df['starttime'] - df['starttime'].dt.floor('1D')
: это выглядит «прилично», но я не уверен в последствиях. Я сомневаюсь, что он будет контролировать те два дня в году, в которые меняется время, то есть летнее и зимнее время. Я хочу просто игнорировать эти дни, 11 утра — это 11 утра, независимо от дня года -
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. да, это мой второй вариант (см. Вопрос в конце), но мне интересно, правильно ли это? Мне это кажется немного хакерским