Konvertiere die Liste der Datenstrings nach datetime sehr langsam mit Python strptime

8

Ich habe Datendateien mit Listen von Strings, die ISO-formatierte Daten darstellen. Momentan lese ich sie mit:

%Vor%

Das sieht ziemlich einfach aus, ist aber lächerlich langsam, wenn man auf riesigen Listen von ~ 25000 Daten arbeitet - & gt; etwa 0,34 Sekunden pro konvertierter Liste. Da ich Tausende solcher Listen habe, suche ich einen schnelleren Weg. Ich konnte jedoch noch keinen finden. Der Dateutil-Parser schneidet noch schlechter ab ...

    
HyperCube 04.01.2013, 19:13
quelle

2 Antworten

8

Das Indizieren / Schneiden scheint schneller zu sein als das von @NPE verwendete Regex:

%Vor%

Ich denke, wenn Sie einen Dateiparser wie numpy.genfromtxt verwenden würden Mit dem Argument converters und einer schnellen String-Parsing-Methode können Sie eine ganze Datei in weniger als einer halben Sekunde lesen und parsen.

Ich habe die folgende Funktion verwendet, um eine Beispieldatei mit etwa 25000 Zeilen, ISO-Datumszeichenfolgen als Index und 10 Datenspalten zu erstellen:

%Vor%

Dann habe ich den folgenden Code verwendet, um die Datei zu analysieren:

%Vor%

pandas (basierend auf numpy) hat einen C-basierten Dateiparser, der noch schneller ist:

%Vor%     
bmu 04.01.2013, 23:48
quelle
15

Hier ist eine Möglichkeit, es etwa 3x schneller zu machen.

Die ursprüngliche Version:

%Vor%

Die schnellere Version:

%Vor%

Dies ist offensichtlich nicht annähernd so flexibel wie strptime() .

edit: Die Verwendung einer einzelnen Regex zum Extrahieren der Datumskomponenten ist geringfügig schneller:

%Vor%     
NPE 04.01.2013 19:23
quelle

Tags und Links