Преобразовать объект времени в формат даты и времени в пандах Python - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть набор данных с именем столбца DateTime , имеющий dtype object .

df['DateTime'] = pd.to_datetime(df['DateTime'])

Я использовал приведенный выше код для преобразования в формат datetime , затем разбил столбец, чтобы получить Date и Time отдельно

df['date'] = df['DateTime'].dt.date
df['time'] = df['DateTime'].dt.time

, но после разделения формат меняется на тип объекта и при преобразовании его в datetime показывает ошибку для имени столбца time как: TypeError: не преобразуетсяв datetime

Как преобразовать его в формат datetime time column

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Как преобразовать его обратно в формат даты и времени, столбец времени

Похоже, возникло недоразумение.Панды datetime серии должны включать компоненты даты и времени.Это не подлежит обсуждению.Вы можете просто использовать pd.to_datetime без указания даты и использовать дату по умолчанию 1900-01-01 date:

# date from jezrael

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

0   1900-01-01 12:48:20
1   1900-01-01 12:30:45
Name: time, dtype: datetime64[ns]

Или использовать другой компонент даты, например сегодняшнюю дату:

today = pd.Timestamp('today').strftime('%Y-%m-%d')
print(pd.to_datetime(today + ' '  + df['time'].astype(str)))

0   2018-11-25 12:48:20
1   2018-11-25 12:30:45
Name: time, dtype: datetime64[ns]

Илирекомбинируйте из ваших date и time серий:

print(pd.to_datetime(df['date'].astype(str) + ' ' + df['time'].astype(str)))

0   2011-01-01 12:48:20
1   2014-01-01 12:30:45
dtype: datetime64[ns]
0 голосов
/ 25 ноября 2018

Вы можете использовать combine в понимании списка с помощью zip:

df = pd.DataFrame({'DateTime': ['2011-01-01 12:48:20', '2014-01-01 12:30:45']})
df['DateTime'] = pd.to_datetime(df['DateTime'])

df['date'] = df['DateTime'].dt.date
df['time'] = df['DateTime'].dt.time

import datetime
df['new'] = [datetime.datetime.combine(a, b) for a, b in zip(df['date'], df['time'])]
print (df)

             DateTime        date      time                 new
0 2011-01-01 12:48:20  2011-01-01  12:48:20 2011-01-01 12:48:20
1 2014-01-01 12:30:45  2014-01-01  12:30:45 2014-01-01 12:30:45

Или преобразовать в строки, объединить и преобразовать снова:

df['new'] = pd.to_datetime(df['date'].astype(str) + ' ' +df['time'].astype(str))
print (df)
             DateTime        date      time                 new
0 2011-01-01 12:48:20  2011-01-01  12:48:20 2011-01-01 12:48:20
1 2014-01-01 12:30:45  2014-01-01  12:30:45 2014-01-01 12:30:45

Но если использовать floor для удаления времени с преобразованием времени в timedeltas, тогда используйте только +:

df['date'] = df['DateTime'].dt.floor('d')
df['time'] = pd.to_timedelta(df['DateTime'].dt.strftime('%H:%M:%S'))

df['new'] = df['date'] + df['time']
print (df)

             DateTime       date     time                 new
0 2011-01-01 12:48:20 2011-01-01 12:48:20 2011-01-01 12:48:20
1 2014-01-01 12:30:45 2014-01-01 12:30:45 2014-01-01 12:30:45
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...