Wie konvertiere ich einen String in ein Datumsobjekt in Python?
Der String wäre: "24052010"
(entsprechend dem Format: "%d%m%Y"
)
Ich möchte kein datetime.datetime Objekt, sondern ein datetime.date Objekt.
Wie konvertiere ich einen String in ein Datumsobjekt in Python?
Der String wäre: "24052010"
(entsprechend dem Format: "%d%m%Y"
)
Ich möchte kein datetime.datetime Objekt, sondern ein datetime.date Objekt.
Für einen einzelnen Wert ist die Methode datetime.strptime
die schnellste
import arrow
from datetime import datetime
import pandas as pd
l = ['24052010']
%timeit _ = list(map(lambda x: datetime.strptime(x, '%d%m%Y').date(), l))
6.86 µs ± 56.5 ns pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 100000 Schleifen pro Durchlauf)
%timeit _ = list(map(lambda x: x.date(), pd.to_datetime(l, format='%d%m%Y')))
305 µs ± 6.32 µs pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 1000 Schleifen pro Durchlauf)
%timeit _ = list(map(lambda x: arrow.get(x, 'DMYYYY').date(), l))
46 µs ± 978 ns pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 10000 Schleifen pro Durchlauf)
Für eine Liste von Werten ist pd.to_datetime
von pandas am schnellsten
l = ['24052010'] * 1000
%timeit _ = list(map(lambda x: datetime.strptime(x, '%d%m%Y').date(), l))
6.32 ms ± 89.6 µs pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 100 Schleifen pro Durchlauf)
%timeit _ = list(map(lambda x: x.date(), pd.to_datetime(l, format='%d%m%Y')))
1.76 ms ± 27.3 µs pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 1000 Schleifen pro Durchlauf)
%timeit _ = list(map(lambda x: arrow.get(x, 'DMYYYY').date(), l))
44.5 ms ± 522 µs pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 10 Schleifen pro Durchlauf)
Für das ISO8601-Datumsformat ist ciso8601
ein Rakete
import ciso8601
l = ['2010-05-24'] * 1000
%timeit _ = list(map(lambda x: ciso8601.parse_datetime(x).date(), l))
241 µs ± 3.24 µs pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 1000 Schleifen pro Durchlauf)
Zeichenfolge "24052010" Auf sehr manuelle Weise könnten Sie einfach so vorgehen: Zerlegen Sie zunächst die Zeichenfolge im Format (jjjj-mm-tt), sodass Sie ein Tupel wie folgt erhalten könnten (2010, 5, 24), konvertieren Sie dann einfach dieses Tupel in ein Datumsformat wie z.B. 2010-05-24.
Sie könnten diesen Code auf einer Liste von ähnlichen Zeichenfolgenobjekten wie oben ausführen und die gesamte Liste von Tupelobjekten in Datumsobjekte umwandeln, indem Sie einfach entpacken (*tupel) den folgenden Code überprüfen.
import datetime
# für einzelne Zeichenfolge einfach verwenden:-
my_str= "24052010"
date_tup = (int(my_str[4:]),int(my_str[2:4]),int(my_str[:2]))
print(datetime.datetime(*date_tup))
Ergebnis: 2012-01-01 00:00:00
# für eine Liste von Zeichenfolgen-Datumsobjekten könnten Sie den folgenden Code verwenden.
date_list = []
str_date = ["24052010", "25082011", "25122011","01012012"]
for items in str_date:
date_list.append((int(items[4:]),int(items[2:4]),int(items[:2])))
for dates in date_list:
# alle Tupelobjekte entpacken und in Datum konvertieren
print(datetime.datetime(*dates))
Ergebnis:
2010-05-24 00:00:00
2011-08-25 00:00:00
2011-12-25 00:00:00
2012-01-01 00:00:00
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.