it-swarm.com.ru

Python / Pandas конвертирует строку только во время

У меня есть следующий Pandas кадр данных в Python 2.7.

import pandas as pd
trial_num = [1,2,3,4,5]
sail_rem_time = ['11:33:11','16:29:05','09:37:56','21:43:31','17:42:06']
dfc = pd.DataFrame(Zip(*[trial_num,sail_rem_time]),columns=['Temp_Reading','Time_of_Sail'])
print dfc

Фрейм данных выглядит следующим образом:

  Temp_Reading Time_of_Sail
             1     11:33:11
             2     16:29:05
             3     09:37:56
             4     21:43:31
             5     17:42:06

Этот фрейм данных взят из файла * .csv. Я использую Pandas для чтения в файле * .csv как фрейм данных Pandas. Когда я использую print dfc.dtypes, он показывает, что столбец Time_of_Sail имеет тип данных object. Я хотел бы преобразовать этот столбец в тип данных datetime, НО мне нужна только часть времени - мне не нужен год, месяц, дата.

Я могу попробовать это:

dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'])
dfc['Time_of_Sail'] = [time.time() for time in dfc['Time_of_Sail']]

но проблема в том, что когда я запускаю print dfc.dtypes, он по-прежнему показывает, что столбец Time_of_Sail равен object.

Есть ли способ преобразовать этот столбец в формат даты и времени, который имеет только время?

Дополнительная информация:

Для создания вышеуказанного информационного кадра и вывода это также работает:

import pandas as pd
trial_num = [1,2,3,4,5]
sail_rem_time = ['11:33:11','16:29:05','09:37:56','21:43:31','17:42:06']
data = [
    [trial_num[0],sail_rem_time[0]],
    [trial_num[1],sail_rem_time[1]],[trial_num[2],sail_rem_time[2]],
    [trial_num[3],sail_rem_time[3]]
    ]
dfc = pd.DataFrame(data,columns=['Temp_Reading','Time_of_Sail'])
dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'])
dfc['Time_of_Sail'] = [time.time() for time in dfc['Time_of_Sail']]
print dfc
print dfc.dtypes
11
edesz

Эти две строки:

dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'])
dfc['Time_of_Sail'] = [time.time() for time in dfc['Time_of_Sail']]

Может быть написано как: 

dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'],format= '%H:%M:%S' ).dt.time
19
Merlin

Используя to_timedelta, мы можем преобразовать строку в формат времени (timedelta64 [ns]), указав единицы измерения в секундах, мин и т.д.,

dfc['Time_of_Sail'] = pd.to_timedelta(dfc['Time_of_Sail'], unit='s')
3
Bhavani Prasad Basuthkar

Если вы просто хотите простое преобразование, вы можете сделать следующее:

import datetime as dt

dfc.Time_of_Sail = dfc.Time_of_Sail.astype(dt.datetime)

или вы можете добавить строку-держатель в ваш столбец времени, как показано ниже, а затем преобразовать с помощью функции apply:

dfc.Time_of_Sail = dfc.Time_of_Sail.apply(lambda x: '2016-01-01 ' + str(x))
dfc.Time_of_Sail = pd.to_datetime(dfc.Time_of_Sail).apply(lambda x: dt.datetime.time(x))
2
Moe Chughtai

Это похоже на работу:

dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'], format='%H:%M:%S' ).apply(pd.Timestamp)

0
ferengi