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
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
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))