Wie kann ich Pandas-Datenrahmen basierend auf Abfragen ohne unerwartetes Verhalten ändern?

Susan Sarandon
Freigeben: 2024-11-03 17:25:02
Original
429 Leute haben es durchsucht

How Can I Modify Pandas Dataframes Based on Queries Without Unexpected Behavior?

Pandas-Ansichts- und Kopierregeln verstehen

Problemstellung

Pandas, eine beliebte Python-Datenquelle Die Manipulationsbibliothek bietet eine Reihe von Methoden zum Auswählen und Ändern von Datenrahmen. Es kann jedoch verwirrend sein, festzustellen, wann eine Auswahl eine Kopie des ursprünglichen Datenrahmens oder eine Ansicht darauf erstellt. Diese Mehrdeutigkeit führt zu unerwartetem Verhalten beim Versuch, Daten zu ändern.

Einfache Regeln

Um dieser Verwirrung entgegenzuwirken, finden Sie hier einige einfache Regeln, die das Anzeige- und Kopierverhalten von Pandas regeln :

  • Alle Vorgänge generieren im Allgemeinen eine Kopie.
  • Wenn das Argument inplace=True angegeben ist, werden Änderungen direkt vorgenommen, aber nur bestimmte Vorgänge unterstützen diese Funktion.
  • Indexer, die zum Festlegen verwendet werden (z. B. .loc, .iloc, .iat, .at), legen Werte direkt fest.
  • Indexer, die zum Abrufen eines Objekts mit einem einzelnen D-Typ verwendet werden, geben normalerweise eine Ansicht zurück. Dieses Verhalten ist jedoch aufgrund von Überlegungen zum Speicherlayout nicht ganz zuverlässig.
  • Indexer, die zum Abrufen von Objekten mit mehreren D-Typen verwendet werden, erstellen immer eine Kopie.

Anwenden der Regeln auf Spezifische Fälle

Lassen Sie uns den von Ihnen erwähnten komplexen Fall untersuchen:

df[df.C <= df.B] = 7654321
Nach dem Login kopieren

In diesem Fall gilt die Regel für die Einstellung mit einem Indexer. Da die Bedingung den Vergleich zweier Spalten beinhaltet, erstellt Pandas eine Zwischenkopie des Datenrahmens, um die Bedingung auszuwerten. Diese Kopie wird dann direkt geändert. Daher ändert dieser Ausdruck erfolgreich die Werte im ursprünglichen Datenrahmen.

Der verkettete Indexierungsausdruck:

df[df.C <= df.B].ix[:, 'B':'E']
Nach dem Login kopieren

verstößt jedoch gegen die Regeln. Durch die Verkettung zweier Indexer entstehen separate Python-Operationen, was es für Pandas schwierig macht, zuverlässig abzufangen. Dies kann zu unerwartetem Verhalten führen und wird daher dringend abgeraten.

Datenrahmen mit Abfragen ändern

Um Datenrahmenwerte basierend auf einer Abfrage zu ändern, verwenden Sie den folgenden Ansatz:

df.loc[df.C <= df.B, 'B':'E'] = 7654321
Nach dem Login kopieren

Dieser Ausdruck verwendet einen einzelnen Indexer, um sowohl die Abfragebedingung auszuwerten als auch die Teilmenge der zu ändernden Spalten anzugeben. Es ist sowohl schneller als auch zuverlässiger als der Ansatz der verketteten Indexierung.

Das obige ist der detaillierte Inhalt vonWie kann ich Pandas-Datenrahmen basierend auf Abfragen ohne unerwartetes Verhalten ändern?. 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