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
этот фрейм данных происходит от A *.CSV-файл. Я использую панд, чтобы читать в *.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
is object
.
есть ли способ преобразовать этот столбец в формат datetime, который имеет только время?
Дополнительная Информация:
чтобы создать вышеупомянутый фрейм данных и вывод, это также работает:
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
3 ответов
эти две строки:
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
Если вы просто хотите простое преобразование, вы можете сделать следующее:
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))
используя to_timedelta, мы можем преобразовать строку в формат времени (timedelta64[ns]), указав единицы как second, min и т. д.,
dfc['Time_of_Sail'] = pd.to_timedelta(dfc['Time_of_Sail'], unit='s')