Konvertieren Liste der datestrings datetime sehr langsam mit Python-strptime
Habe ich die Daten-Dateien mit Listen von Zeichenfolgen, die ISO-Datumsformat. Derzeit, ich lese Sie in der Nutzung:
mydates = [ datetime.datetime.strptime(timdata[x], "%Y-%m-%dT%H:%M:%S") for x in range(len(timedata)) ]
Sieht das ziemlich einfach, aber ist wahnsinnig langsam, wenn der Betrieb auf riesige Listen von ~25000 dates -> etwa bei 0,34 Sekunden pro umgewandelt Liste.
Da habe ich Tausende von solchen Listen bin ich auf der Suche nach einem schnelleren Weg. Allerdings konnte ich nicht finden bisher. Die dateutil-parser führt sogar noch schlimmer...
- Du meinst, Sie denken, Parsen und konvertieren von 25.000 Termine, einschließlich der Bau einer neuen Liste von der gleichen Größe sollte schneller sein als ein Drittel einer Sekunde in eine interpretierte Sprache? Möchten Sie vielleicht zu wechseln eine kompilierte Sprache.
- Sie können Lesen und analysieren einer Datei mit mehr als 25000 Termine und 10 mehr Spalten in weniger als einer Drittel Sekunde mit numpy/pandas.
- Das ist, was ich erlebt habe, zu....
Du musst angemeldet sein, um einen Kommentar abzugeben.
Indizierung /slicing scheint schneller zu sein als die regex verwendet, die von @NPE:
Ich denke, wenn man mit einem Datei-parser, wie
numpy.genfromtxt
, dieconverters
argument und eine schnelle string-parsing-Methode können Sie Lesen und analysieren eine ganze Datei in weniger als einer halben Sekunde.Ich habe folgende Funktion zum erstellen einer Beispiel-Datei mit über 25000 Zeilen, ISO-Datums-Zeichenketten als index-und 10 Daten-Spalten:
Als ich verwendet folgenden code zum Parsen der Datei:
pandas (basierend auf numpy) hat eine C-basierte Datei-parser, der ist noch schneller:
Hier ist ein Weg, es zu tun zu 3x schneller.
Original version:
Die schnellere version:
Dies ist natürlich bei weitem nicht so flexibel wie
strptime()
.edit: Mit einem einzigen regex zu extrahieren Sie die Komponenten Datum ist unwesentlich schneller: