2017-06-06 11 views
2

Ich brauche Hilfe bei der Konvertierung in Python/Pandas Datum Zeitformat. Zum Beispiel sind meine Zeiten wie die folgende Zeile gespeichert:Konvertieren in Datum-Uhrzeit-Format in Pandas?

2017-01-01 05:30:24.468911+00:00 
..... 
2017-05-05 01:51:31.351718+00:00 

und ich mag die einfachste Art und Weise wissen, dass dies in Datum Zeitformat für im Wesentlichen des Ausführen von Operationen mit der Zeit zu konvertieren (wie, was ist der Bereich, in Tagen meines Dataset, um mein Dataset nach Zeit in Stücke aufzuteilen, was ist der Zeitunterschied von einem Zeitpunkt zum anderen? Es macht mir nichts aus, etwas von der Bedeutung für die Zeit zu verlieren, wenn das die Dinge leichter macht. Ich danke dir sehr!

+1

Sind Sie diejenigen, die als Zeichenketten zu speichern? Wenn dies der Fall ist, können Sie 'strptime()' verwenden, um die in einem Objekt angegebene Zeit aufzubrechen und Operationen für Mitglieder dieser Objekte auszuführen. Die Elemente der Objekte werden durch den Formatierungsstring bestimmt, den Sie an die Methode übergeben. Weitere Informationen finden Sie in der Dokumentation zu [this] (https://docs.python.org/3.6/library/time.html#time.strptime). – nerdenator

+0

Ja, sie werden als Zeichenfolgen gespeichert. Entschuldigung für die Nichtangabe. Ich werde versuchen, strptime(). Vielen Dank! –

Antwort

2

Timestamp wil lch konvertiere es für dich.

>>> pd.Timestamp('2017-01-01 05:30:24.468911+00:00') 
Timestamp('2017-01-01 05:30:24.468911+0000', tz='UTC') 

Angenommen, Sie haben einen Datenrahmen, die Ihre Timestamp-Spalte enthält (nennen wir es stamp). Sie können apply auf dieser Spalte verwenden zusammen mit Timestamp:

>>> pd.TimeSeries(df.stamp) 
0 2017-01-01 05:30:24.468911+00:00 
1 2017-05-05 01:51:31.351718+00:00 
Name: stamp, dtype: object 

Sobald Sie ein Timestamp Objekt haben, ist es ziemlich effizient zu handhaben:

df = pd.DataFrame(
    {'stamp': ['2017-01-01 05:30:24.468911+00:00', 
       '2017-05-05 01:51:31.351718+00:00']}) 
>>> df 
    stamp 
0 2017-01-01 05:30:24.468911+00:00 
1 2017-05-05 01:51:31.351718+00:00 

>>> df['stamp'].apply(pd.Timestamp) 
0 2017-01-01 05:30:24.468911+00:00 
1 2017-05-05 01:51:31.351718+00:00 
Name: stamp, dtype: datetime64[ns, UTC] 

Sie auch Timeseries nutzen könnten. Sie können zum Beispiel einfach ihre Werte unterscheiden.

Sie können auch einen Blick auf diese SO answer werfen, die Zeitzone nicht bewusst Werte zu beachten.

2

Nehmen wir an, ich habe zwei Strings 2017-06-06 und 1944-06-06 und ich wollte den Unterschied (was Python eine timedelta nennt) zwischen den beiden bekommen.

Zuerst muss ich import datetime. Dann brauche ich werde diese beiden Strings in datetime Objekte zu erhalten:

>>> a = datetime.datetime.strptime('2017-06-06', '%Y-%m-%d') 
>>> b = datetime.datetime.strptime('1944-06-06', '%Y-%m-%d') 

Das führt uns zwei Datetime-Objekte geben, die in arithmetischen Funktionen verwendet werden können, die ein timedelta Objekt zurückgeben:

>>> c = abs((a-b).days) 

Dies wird uns 26663 und days ist die größte Auflösung, dass timedelta unterstützt: documentation

1

Da die Pandas-Tag ist da:

df = pd.DataFrame(['2017-01-01 05:30:24.468911+00:00']) 
df.columns = ['Datetime'] 
df['Datetime'] = pd.to_datetime(df['Datetime'], format='%Y-%m-%d %H:%M:%S.%f', utc=True) 
print(df.dtypes) 
Verwandte Themen