Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python/Pandas仅将字符串转换为时间_Python_Datetime_Pandas_Dataframe - Fatal编程技术网

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

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 数据帧如下所示:

我在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
数据帧如下所示:

  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。