Извлеките часы и минуты из отметки времени, но сохраните ее в формате datetime - PullRequest
1 голос
/ 03 апреля 2020

У меня есть кадр данных, похожий на этот

   open  Start show Einde show
5   NaN     11:30   NaN
6   16:00   18:00   19:45
7   14:30   16:30   18:15
8   NaN     NaN      NaN
9   18:45   20:45   22:30

Эти часы представлены в строковом формате, и я хотел бы преобразовать их в формат даты и времени. Всякий раз, когда я пытаюсь использовать pd.to_datetime(evs['open'], errors='coerce') (чтобы изменить один из столбцов), он переводит часы в полный формат даты и времени, например: 2020-04-03 16:00:00 с текущей датой. Я хотел бы иметь только час, но все еще в формате datetime, чтобы я мог добавить минуты и т. Д. c.

Теперь, когда я использую dt.hour для доступа к часу, он возвращает строку, а не в HH:MM формат.

Может кто-нибудь помочь мне, пожалуйста? Я читаю в CSV через Pandas read_csv, но когда я использую анализатор даты, я получаю ту же проблему. В идеале это будет исправлено в разделе read_csv, а не по отдельности, но на этом этапе я возьму все, что угодно.

Спасибо!

1 Ответ

1 голос
/ 04 апреля 2020

Как прокомментировал Крис, невозможно конвертировать только часы и минуты в формат даты и времени. Но вы можете использовать timedeltas для решения вашей проблемы.

import datetime
import pandas as pd

def to_timedelta(date): 
    date = pd.to_datetime(date)
    try:
        date_start = datetime.datetime(date.year, date.month, date.day, 0, 0)
    except TypeError:
        return pd.NaT # to keep dtype of series; Alternative: pd.Timedelta(0)
    return date - date_start


df['open'].apply(to_timedelta)

Вывод:

5        NaT
6   16:00:00
7   14:30:00
8        NaT
9   18:45:00
Name: open, dtype: timedelta64[ns]

Теперь вы можете использовать datetime.timedelta для добавления / вычитания минут, часов или чего-либо еще:

df['open'] + datetime.timedelta(minutes=15)

Вывод:

5        NaT
6   16:15:00
7   14:45:00
8        NaT
9   19:00:00
Name: open, dtype: timedelta64[ns]

Кроме того, довольно просто вернуться к полному времени:

df['open'] + datetime.datetime(2020, 4, 4)

Вывод:

5                   NaT
6   2020-04-04 16:00:00
7   2020-04-04 14:30:00
8                   NaT
9   2020-04-04 18:45:00
Name: open, dtype: datetime64[ns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...