Как добавить дату начала для преобразования даты и времени в pandas и расширить формулу на все строки, как в Excel? - PullRequest
3 голосов
/ 29 октября 2019

Я создал простой одностолбцовый фрейм данных со строковыми значениями времени в формате% H:% M:% S.

import pandas as pd 

data = ['22:00:00', '22:30:00', '23:00:00', '23:30:00', '00:00:00', '00:30:00', '01:00:00']
df = pd.DataFrame(data, columns = ['DateTime'])
df

Результат:

    DateTime
0   22:00:00
1   22:30:00
2   23:00:00
3   23:30:00
4   00:00:00
5   00:30:00
6   01:00:00

Как мне прикрепить дату, т.е. сегодня: 2019-10-28 ко времени в первой строке и распространить ее на всеоставшиеся времена переносятся на новый день в полночь (как в столбце 4).

Желаемый результат:

    DateTime
0   2019-10-28 22:00:00
1   2019-10-28 22:30:00
2   2019-10-28 23:00:00
3   2019-10-28 23:30:00
4   2019-10-29 00:00:00
5   2019-10-29 00:30:00
6   2019-10-29 01:00:00

Я попытался

df['DateTime'] = pd.to_datetime(df.DateTime, format='%H:%M:%S')

, но он начинает дату с 1900-01-01 и не переносится в полночь.

Ответы [ 2 ]

3 голосов
/ 29 октября 2019

Исправьте, создав скрытую группу, с cumsum, поскольку время отличается меньше 0, мы должны найти, что это новый день, так как 23:99 всегда больше, чем 00:00.

s=pd.to_timedelta(df.DateTime)
pd.to_timedelta(s.diff().dt.total_seconds().lt(0).cumsum(),unit='D')+s+pd.to_datetime('2019-10-28')
Out[37]: 
0   2019-10-28 22:00:00
1   2019-10-28 22:30:00
2   2019-10-28 23:00:00
3   2019-10-28 23:30:00
4   2019-10-29 00:00:00
5   2019-10-29 00:30:00
6   2019-10-29 01:00:00
Name: DateTime, dtype: datetime64[ns]
0 голосов
/ 29 октября 2019

Используйте панды диапазон дат возможности.

Учитывая, что у вас есть дата начала и время начала, и у вас есть установленный период, вы можете расширить этот стиль "Excel" длязаданное количество строк (или периодов)

pd.date_range("2019-01-01T22:00:00", freq="30min", periods=5)
# >> DatetimeIndex(['2019-01-01 22:00:00', '2019-01-01 22:30:00', '2019-01-01 23:00:00', '2019-01-01 23:30:00', '2019-01-02 00:00:00'], dtype='datetime64[ns]', freq='30T')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...