Python/Pandas仅将字符串转换为时间
我在Python2.7中有以下数据帧Python/Pandas仅将字符串转换为时间,python,datetime,pandas,dataframe,Python,Datetime,Pandas,Dataframe,我在Python2.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 数据帧如下所示:
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作为Pandas数据帧读取*.csv文件。当我使用print dfc.dtypes
时,它向我显示Sail的Time\u列有一个数据类型对象
。我想将此列转换为datetime
datatype,但我只需要时间部分,不需要年、月、日期
我可以试试这个:
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\u列的
是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
如果您只需要简单的转换,可以执行以下操作:
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))
这两条线:
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')
这似乎有效:
dfc['Time\u of_Sail']=pd.to\u datetime(dfc['Time\u of_Sail'],格式='%H:%M:%S')。apply(pd.Timestamp)
我正在使用Python3.4,但无法重现您的问题。当我尝试您建议的转换时,我发现数据类型已更改为datetime64[ns]
。顺便说一句,数据框架的构造对我来说不起作用,因为zip返回的迭代器不是数据框架构造函数所接受的。这可能是一个非常愚蠢的问题,但是你试过运行你发布的代码吗?是的,再试一次。对我有好处。在我尝试了这两种转换之后,dtype
是object
,尽管如果只运行了第一次转换,dtype
会变成datetime64[ns]
。你是说它现在可以工作了吗?是的,它似乎对我有效。好的,我添加了另一种方法来创建数据帧和解决问题。这可能会有帮助-这种新方法对我来说似乎更直接一些。谢谢。这解决了我的问题-我可以指定时间的格式(没有日期),我在后面,你能告诉我什么是dt.time
,它是做什么的吗。我猜它是导入的datetime模块。是否可以在原地执行此操作?这将导致数据类型为object而不是DatTime。