wake-up-neo.com

Python/Pandas konvertiert Zeichenfolge nur in die Uhrzeit

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

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
19
Merlin

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))
2
Moe Chughtai

Das scheint zu funktionieren:

dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'], format='%H:%M:%S' ).apply(pd.Timestamp)

0
ferengi