[Python] Stärken und Schwächen von DataFrame in Bezug auf den Zeitaufwand

Einführung In Python kann pandas.DataFrame zweidimensionale Tabellendaten verarbeiten. Es ist einfacher, Tabellendaten zu verarbeiten als Liste und Tupel, die Arrays in anderen Sprachen entsprechen, aber die Verarbeitungsgeschwindigkeit ist im Grunde schneller als die von Liste und Tupel. Sehen wir uns die Stärken und Schwächen eines solchen DataFrames an, während das Programm tatsächlich ausgeführt wird.

Ausführungsumgebung / -bedingungen Ausführungsumgebung ・ Windows10 Home 64bit Bedingungen -Verwendete Daten: CSV-Daten von 10000 Zeilen ・ Spalte der verwendeten Daten: Index, Studentenausweis, A-E 5-Fächerwerte (0-10000) * Modelliert auf einer Liste von Noten von 10.000 Studenten, die eine bestimmte Prüfung abgelegt haben

DataFrame-Stärke Die Stärke von DataFrame besteht darin, dass es einfach zu verarbeiten ist und Daten mit hoher Geschwindigkeit verarbeiten kann.

Bei der Berechnung des Durchschnittswerts Fügen Sie danach eine Spalte hinzu, um den Prozess des Ersetzens des Durchschnittswerts zu implementieren. Wenn es sich um eine Liste handelt, wird die folgende Verarbeitung durchgeführt.
for idx, row in enumerate(list):
	row.extend('0')
	row[7] = str((float(row[2]) + float(row[3]) + float(row[4]) + float(row[5]) + float(row[6]))/5.0)

Es ist schriftlich ähnlich wie in anderen Sprachen. Das ist in Ordnung, aber ... Wenn Sie es mit DataFrame implementieren, benötigen Sie nur eine Zeile darunter.

df['average'] = (df['subjectA'] + df['subjectB'] + df['subjectC'] + df['subjectD'] + df['subjectE'])/5

Da Sie mit dem Bild einer einzeiligen Operation schreiben können, besteht ein geringeres Risiko für Codierungsfehler.

Beim Sortieren Wenn beim Sortieren in absteigender Reihenfolge des überdurchschnittlichen Werts eine Liste angezeigt wird, wird die folgende Verarbeitung durchgeführt.
list = sorted(list, key=lambda x: x[7], reverse=True)

Die Liste kann auch in einer Zeile implementiert werden. Wenn Sie dies mit einem DataFrame implementieren, benötigen Sie nur eine Zeile.

df.sort_values('average', ascending=False)
Beim Eingrenzen nach Bedingungen Wenn Sie nur die Daten mit einer durchschnittlichen Punktzahl von 50 Punkten oder mehr eingrenzen möchten, wird die folgende Verarbeitung für die Liste durchgeführt.
list2 = []
for idx, row in enumerate(list):
	if 50 <= float(row[7]):
		list2.append(row)

Verwenden Sie die for-Schleife wie bei der Berechnung des Durchschnitts. Wenn Sie dies in einem DataFrame implementieren, können Sie davon ausgehen, dass es sich um eine Zeile handelt.

df2 = df[50 < df['average']]
Die Geschwindigkeit jedes Prozesses ist ... Die Geschwindigkeit jedes dieser Prozesse wird wie folgt 10-mal gemessen und gemittelt.
Vorgangsname 10 mal durchschnittliche Reisezeit(list)[sec] 10 mal durchschnittliche Reisezeit(DataFrame)[sec]
Durchschnittliche Berechnung 0.764768385887146 0.01179955005645752
Sortieren 0.030899477005004884 0.011399650573730468
Eingrenzen 0.04529948234558105 0.006699275970458984

Der Code ist nicht nur einfach mit DataFrame zu implementieren, sondern Sie können auch feststellen, dass er schnell ist.

DataFrame-Schwächen Die Schwäche von DataFrame ist die for-Schleife. Wenn Sie den Durchschnittswert in einer for-Schleife erstellen möchten, verwenden Sie den folgenden Code.
for idx in range(len(df)):
	df.iat[idx, 6] = str((float(df.iat[idx, 1]) + float(df.iat[idx, 2])
		+ float(df.iat[idx, 3]) + float(df.iat[idx, 4]) + float(df.iat[idx, 5])/5.0))

Es dauert durchschnittlich 2,33 [s] 10 Mal, was langsamer ist als das der Liste. Daher ist es beim Umgang mit DataFrame wünschenswert, nicht so viel wie möglich zu verwenden.

Wenn Sie wirklich für in DataFrame verwenden möchten Es gibt jedoch Situationen, in denen for in DataFrame verwendet wird. In einem solchen Fall können Sie den Prozess beschleunigen, indem Sie nur den Teil, der für verwendet wird, in Liste oder Ndarray aufnehmen oder eine Methode wie den folgenden verwenden. [[Python3 / pandas] Maßnahmen zur Geschwindigkeitsverbesserung, wenn Sie DataFrame wirklich Zeile für Zeile verarbeiten möchten](https://qiita.com/siruku6/items/0633db690283a0f525ad)

Informationen zur Erstellung von Beispieldaten Die diesmal verwendeten Beispieldaten wurden mit dem Code unter der folgenden URL erstellt. https://github.com/HagiAyato/PythonTests/blob/main/make10000data.py

Recommended Posts

[Python] Stärken und Schwächen von DataFrame in Bezug auf den Zeitaufwand
Berücksichtigung der Stärken und Schwächen von Python
Unterschied zwischen Ruby und Python in Bezug auf Variablen
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python
Erläuterung der Bearbeitungsentfernung und Implementierung in Python
Zur Darstellung von Datum, Uhrzeit, Uhrzeit und Sekunden in Python
Grundlegende Bedienung von Python Pandas Series und Dataframe (1)
"Lineare Regression" und "Probabilistische Version der linearen Regression" in Python "Bayes lineare Regression"
Verarbeitung von CSV-Daten in voller und halber Breite in Python
Berechnung der Standardabweichung und des Korrelationskoeffizienten in Python
[Python] Misst und zeigt die für die Verarbeitung erforderliche Zeit an
[Python] Berechnung der Differenz von Datum und Zeit in Monaten und Jahren
Beispiel für das Abrufen des Modulnamens und des Klassennamens in Python
Zusammenfassung der Datumsverarbeitung in Python (Datum / Uhrzeit und Datum)
Überprüfen Sie die Verarbeitungszeit und die Anzahl der Aufrufe für jeden Prozess mit Python (cProfile).
Objektäquivalenzbeurteilung in Python
Referenzreihenfolge von Klassenvariablen und Instanzvariablen in "self. Klassenvariablen" in Python
[Python] Zeigt die verstrichene Zeit in Stunden, Minuten und Sekunden an (00:00:00)
Stapel und Warteschlange in Python
Holen Sie sich das aktuelle Datum und die aktuelle Uhrzeit in Python unter Berücksichtigung des Zeitunterschieds
Zeichnen Sie Zeitreihendaten in Python mit Pandas und Matplotlib
[Tipps] Probleme und Lösungen bei der Entwicklung von Python + Kivy
Unittest und CI in Python
Implementierung der schnellen Sortierung in Python
Quellinstallation und Installation von Python
Die Geschichte, zum ersten Mal seit 5 Jahren wieder an die Front zurückzukehren und Python Django umzugestalten
Bestimmen Sie das Datums- und Uhrzeitformat mit Python und konvertieren Sie es in Unixtime
Ich habe die Berechnungszeit des in Python geschriebenen gleitenden Durchschnitts verglichen
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Liste der in Python verfügbaren Löser und Modellierer für lineares Design (LP)
Durchsuchen Sie .loc und .iloc gleichzeitig in pandas DataFrame
Überprüfen Sie die Komprimierungsrate und -zeit von PIXZ, die in der Praxis verwendet werden
Holen Sie sich den Titel und das Lieferdatum von Yahoo! News in Python
Umgebungskonstruktion von Python und OpenCV
Bildpixel-Manipulation in Python
Die Geschichte von Python und die Geschichte von NaN
Pakete, die MIDI mit Python Midi und Pretty_Midi verarbeiten
[Python] Operationsnotiz von Pandas DataFrame
Unterschied zwischen list () und [] in Python
Unterschied zwischen == und ist in Python
Installation von SciPy und matplotlib (Python)
Zeigen Sie Fotos in Python und HTML an
Sortieralgorithmus und Implementierung in Python
Zeitdelta in Python 2.7-Serie teilen
Bearbeiten Sie Dateien und Ordner in Python
MySQL-automatische Escape-Funktion von Parametern in Python
Über Python und Cython dtype
Umgang mit JSON-Dateien in Python
Messen Sie die Ausführungszeit von Funktionen in Python
Zuweisungen und Änderungen in Python-Objekten
Implementierung eines Lebensspiels in Python
Audio-Wellenform-Anzeige in Python
Überprüfen und verschieben Sie das Verzeichnis in Python
Dies und das von Python-Eigenschaften
Verschlüsselung mit Python: IND-CCA2 und RSA-OAEP
Hashing von Daten in R und Python
Funktionssynthese und Anwendung in Python
Exportieren und Ausgeben von Dateien in Python