Ich habe den folgenden Pandas-Datenrahmen in 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
Der Datenrahmen sieht folgendermaßen aus:
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
Dieser Datenrahmen stammt aus einer * .csv-Datei. Ich verwende Pandas, um die * .csv-Datei als Pandas-Datenrahmen einzulesen. Wenn ich print dfc.dtypes
verwende, wird mir angezeigt, dass die Spalte Time_of_Sail
einen Datentyp object
hat. Ich möchte diese Spalte in datetime
datatype konvertieren, ABER ich möchte nur den Zeitteil - ich möchte nicht das Jahr, den Monat, das Datum.
Ich kann das ausprobieren:
dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'])
dfc['Time_of_Sail'] = [time.time() for time in dfc['Time_of_Sail']]
das Problem ist jedoch, dass beim Ausführen von print dfc.dtypes
immer noch angezeigt wird, dass die Spalte Time_of_Sail
object
ist.
Gibt es eine Möglichkeit, diese Spalte in ein datetime-Format umzuwandeln, das nur die Zeit hat?
Zusätzliche Information:
Um den obigen Datenrahmen und die Ausgabe zu erstellen, funktioniert dies auch:
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
Diese zwei Zeilen:
dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'])
dfc['Time_of_Sail'] = [time.time() for time in dfc['Time_of_Sail']]
Kann geschrieben werden als:
dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'],format= '%H:%M:%S' ).dt.time
Mit to_timedelta können wir den String in ein Zeitformat (timedelta64 [ns]) konvertieren, indem wir Einheiten als second, min usw. angeben.
dfc['Time_of_Sail'] = pd.to_timedelta(dfc['Time_of_Sail'], unit='s')
Wenn Sie nur eine einfache Konvertierung wünschen, können Sie Folgendes tun:
import datetime as dt
dfc.Time_of_Sail = dfc.Time_of_Sail.astype(dt.datetime)
oder Sie können Ihrer Zeitspalte wie folgt eine Halterzeichenfolge hinzufügen und anschließend mit einer Apply-Funktion konvertieren:
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))
Das scheint zu funktionieren:
dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'], format='%H:%M:%S' ).apply(pd.Timestamp)