Python/Pandas只将字符串转换为时间

2024-06-17 16:41:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下Python2.7中的Pandas数据框。

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_Sailobject

是否有方法将此列转换为只有时间的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

Tags: of数据pandasdatetimetimetempnumpd
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

使用to_timedelta,我们可以将字符串转换为时间格式(timedelta64[ns]),方法是将单位指定为秒、分钟等

dfc['Time_of_Sail'] = pd.to_timedelta(dfc['Time_of_Sail'], unit='s')

如果只需要简单的转换,可以执行以下操作:

import datetime as dt

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

或者,您可以按如下所示在时间列中添加一个holder字符串,然后使用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))

相关问题 更多 >