Heim >Backend-Entwicklung >Python-Tutorial >Warum ist die Verwendung von Wörterbüchern zum Ersetzen von Werten in Pandas-Serien langsam und wie können Sie die Leistung verbessern?

Warum ist die Verwendung von Wörterbüchern zum Ersetzen von Werten in Pandas-Serien langsam und wie können Sie die Leistung verbessern?

Susan Sarandon
Susan SarandonOriginal
2024-11-13 05:46:02698Durchsuche

Why is Using Dictionaries to Replace Values in Pandas Series Slow, and How Can You Improve Performance?

Verbesserung der Leistung der Wertersetzung in Pandas-Reihen mithilfe von Wörterbüchern

Das Ersetzen von Werten in einer Pandas-Reihe mithilfe eines Wörterbuchs ist eine häufige Aufgabe. Obwohl das Ersetzen von Werten mit s.replace(d) empfohlen wird, kann es erheblich langsamer sein als die Verwendung eines einfachen Listenverständnisses.

Ursachen für langsame Leistung

Die langsame Leistung von s.replace(d) ergibt sich aus der Behandlung von Randfällen und seltenen Situationen. Es umfasst:

  • Konvertieren des Wörterbuchs in eine Liste.
  • Iterieren durch die Liste und Überprüfen auf verschachtelte Wörterbücher.
  • Einspeisen eines Iterators von Schlüsseln und Werten in a Funktion ersetzen.

Alternative Methoden

Um die Leistung zu verbessern, sollten Sie die folgenden Methoden in Betracht ziehen:

  • Vollständige Karte : Verwenden Sie s.map(d), wenn alle Werte in der Reihe vom Wörterbuch abgebildet werden. Diese Methode ist effizient und durchweg schneller.
  • Partielle Zuordnung: Wenn nur ein kleiner Teil (z. B. weniger als 5 %) der Werte vom Wörterbuch abgebildet wird, verwenden Sie s.map(d ).fillna(s['A']).astype(int). Dieser Ansatz kombiniert Mapping mit Füllen und vermeidet die Notwendigkeit einer teuren Iteration.

Benchmarking

Benchmarks zeigen den Leistungsunterschied zwischen s.replace(d), s .map(d) und Listenverständnis:

##### Full Map #####

d = {i: i+1 for i in range(1000)}

%timeit df['A'].replace(d)                          # Slow (1.98s)
%timeit df['A'].map(d)                              # Fast (84.3ms)

##### Partial Map #####

d = {i: i+1 for i in range(10)}

%timeit df['A'].replace(d)                          # Intermediate (20.1ms)
%timeit df['A'].map(d).fillna(df['A']).astype(int)  # Faster (111ms)

Dies zeigt, dass s.map(d) bei vollständigen oder teilweisen Zuordnungen durchweg schneller ist als s.replace(d).

Fazit

Abhängig von der Vollständigkeit der Wörterbuchabdeckung, s.map(d) oder s.map(d).fillna(s['A']).astype(int) sollte gegenüber s.replace(d) für einen effizienten Wertersatz in der Pandas-Serie bevorzugt werden.

Das obige ist der detaillierte Inhalt vonWarum ist die Verwendung von Wörterbüchern zum Ersetzen von Werten in Pandas-Serien langsam und wie können Sie die Leistung verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn