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

ede*_*esz 16 python datetime dataframe pandas

我在Python 2.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
Run Code Online (Sandbox Code Playgroud)

数据框如下所示:

  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
Run Code Online (Sandbox Code Playgroud)

此数据框来自*.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']]
Run Code Online (Sandbox Code Playgroud)

但问题是,当我运行print dfc.dtypes它时仍然显示列Time_of_Sailobject.

有没有办法将此列转换为只有时间的日期时间格式?

附加信息:

要创建上述数据框和输出,这也有效:

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
Run Code Online (Sandbox Code Playgroud)

Mer*_*lin 30

这两行:

dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'])
dfc['Time_of_Sail'] = [time.time() for time in dfc['Time_of_Sail']]
Run Code Online (Sandbox Code Playgroud)

可以写成:

dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'],format= '%H:%M:%S' ).dt.time
Run Code Online (Sandbox Code Playgroud)

  • 你能告诉我什么是 `dt.time` 结尾,它有什么作用。我猜它是导入的日期时间模块 (3认同)
  • 嗨,这将导致dtype是object而不是datime。 (3认同)

小智 5

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

dfc['Time_of_Sail'] = pd.to_timedelta(dfc['Time_of_Sail'], unit='s')
Run Code Online (Sandbox Code Playgroud)