Heim > Backend-Entwicklung > Python-Tutorial > Warum ist das zeilenweise Auffüllen eines Pandas-DataFrames ineffizient und was ist ein besserer Ansatz?

Warum ist das zeilenweise Auffüllen eines Pandas-DataFrames ineffizient und was ist ein besserer Ansatz?

Mary-Kate Olsen
Freigeben: 2024-11-30 10:14:11
Original
819 Leute haben es durchsucht

Why is Populating a Pandas DataFrame Row-by-Row Inefficient, and What's a Better Approach?

Erstellen und Füllen eines leeren Pandas-DataFrames

Konzeptionell könnte man damit beginnen, einen leeren DataFrame zu erstellen und ihn dann schrittweise mit Werten zu füllen . Dieser Ansatz ist jedoch ineffizient und kann zu Leistungsproblemen führen.

Die Fallstricke beim zeilenweisen Erweitern eines DataFrames

Das iterative Anhängen von Zeilen an einen leeren DataFrame ist rechenintensiv . Aufgrund der erforderlichen dynamischen Speicherzuweisung und -neuzuweisung führt dies zu quadratischen Komplexitätsoperationen. Dies kann die Leistung erheblich beeinträchtigen, insbesondere beim Umgang mit großen Datensätzen.

Ein alternativer Ansatz: Sammeln von Daten in einer Liste

Anstatt einen DataFrame zeilenweise zu vergrößern, ist dies der Fall Es wird empfohlen, die Daten in einer Liste zusammenzufassen. Dies hat mehrere Vorteile:

  • Es ist effizienter und deutlich schneller.
  • Listen haben im Vergleich zu DataFrames einen geringeren Speicherbedarf.
  • Datentypen werden automatisch abgeleitet, Manuelle Anpassungen entfallen.
  • Listen unterstützen das Anhängen von Vorgängen, ohne den Speicher zu verändern Zuordnung.

Erstellen eines DataFrames aus einer Liste

Sobald Daten in einer Liste gesammelt wurden, kann ein DataFrame einfach durch Konvertieren der Liste mit pd erstellt werden .DataFrame(). Dies stellt eine ordnungsgemäße Datentypinferenz sicher und automatisiert das Festlegen eines RangeIndex für den DataFrame.

Beispiel

Betrachten Sie das in der Frage beschriebene Szenario. Der folgende Code zeigt, wie man Daten in einer Liste sammelt und dann einen DataFrame erstellt:

import pandas as pd

data = []
dates = [pd.to_datetime(f"2023-08-{day}") for day in range(10, 0, -1)]

valdict = {'A': [], 'B': [], 'C': []}  # Initialize symbol value lists

for date in dates:
    for symbol in valdict:
        if date == dates[0]:
            valdict[symbol].append(0)
        else:
            valdict[symbol].append(1 + valdict[symbol][-1])

# Create a DataFrame from the accumulated data
df = pd.DataFrame(valdict, index=dates)
Nach dem Login kopieren

Dieser Ansatz gewährleistet eine effiziente Datenakkumulation und eine nahtlose DataFrame-Erstellung ohne Leistungsaufwand oder Bedenken hinsichtlich Objektspalten.

Das obige ist der detaillierte Inhalt vonWarum ist das zeilenweise Auffüllen eines Pandas-DataFrames ineffizient und was ist ein besserer Ansatz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage