web-dev-qa-db-fra.com

Python/Pandas convertit la chaîne en temps seulement

J'ai le dataframe Pandas suivant dans 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

Le dataframe ressemble à ceci:

  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

Cette image de données provient d'un fichier * .csv. J'utilise Pandas pour lire le fichier * .csv en tant que base de données Pandas. Lorsque j'utilise print dfc.dtypes, cela me montre que la colonne Time_of_Sail a un type de données object. Je voudrais convertir cette colonne en type de données datetime MAIS je veux seulement la partie heure - je ne veux pas l'année, le mois, la date.

Je peux essayer ceci:

dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'])
dfc['Time_of_Sail'] = [time.time() for time in dfc['Time_of_Sail']]

mais le problème est que lorsque je lance print dfc.dtypes, il indique toujours que la colonne Time_of_Sail est object.

Existe-t-il un moyen de convertir cette colonne en un format datetime qui n’a que le temps?

Information additionnelle:

Pour créer le cadre de données et la sortie ci-dessus, cela fonctionne également:

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
11
edesz

Ces deux lignes:

dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'])
dfc['Time_of_Sail'] = [time.time() for time in dfc['Time_of_Sail']]

Peut être écrit comme: 

dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'],format= '%H:%M:%S' ).dt.time
19
Merlin

En utilisant to_timedelta, nous pouvons convertir une chaîne en format de temps (timedelta64 [ns]) en spécifiant des unités en seconde, min, etc.

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

Si vous voulez juste une conversion simple, vous pouvez faire ce qui suit:

import datetime as dt

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

ou vous pouvez ajouter une chaîne de titulaire à votre colonne time comme ci-dessous, puis convertir ensuite à l'aide d'une fonction 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))
2
Moe Chughtai