Stammdatentransformation in Pandas mit diesen drei nützlichen Techniken

Ein Einblick in das Filtern, Manipulieren und Funktionieren

Photo by Mylad Fakurian on Unsplash

Denken Sie an das letzte Mal zurück, als Sie mit einem schön formatierten Datensatz gearbeitet haben. Gut benannte Spalten, minimale fehlende Werte und ordnungsgemäße Organisation. Es ist ein schönes – fast befreiendes – Gefühl, mit Daten gesegnet zu sein, die man nicht bereinigen und transformieren muss.

Nun, es ist schön, bis Sie aus Ihrem Tagtraum aufbrechen und weiter an dem hoffnungslosen Durcheinander aus kaputten Reihen und unsinnigen Etiketten herumbasteln, das vor Ihnen liegt.

Es gibt keine sauberen Daten (in ihrer ursprünglichen Form). Wenn Sie ein Datenwissenschaftler sind, wissen Sie das. Wenn Sie gerade erst anfangen, sollten Sie dies akzeptieren. Sie müssen Ihre Daten transformieren, um effektiv damit arbeiten zu können.

Lassen Sie uns über drei Möglichkeiten sprechen, dies zu tun.

Filtern – aber richtig erklärt

Lassen Sie uns über das Filtern sprechen – aber etwas ausführlicher, als Sie es vielleicht gewohnt sind. Als eine der gebräuchlichsten und nützlichsten Datentransformationsoperationen ist die effektive Filterung eine unverzichtbare Fähigkeit für jeden Datenwissenschaftler. Wenn Sie Pandas kennen, ist dies wahrscheinlich eine der ersten Operationen, die Sie gelernt haben.

Lassen Sie uns dies anhand meines seltsam vielseitigen Lieblingsbeispiels überprüfen: einem DataFrame mit Schülernoten, treffend genannt grades:

Bild vom Autor

Wir werden alle Ergebnisse unter 90 herausfiltern, weil wir uns an diesem Tag dafür entschieden haben, schlecht ausgebildete Pädagogen zu sein, die sich nur um die besten Schüler kümmern (bitte tun Sie das nie wirklich). Die Standardcodezeile, um dies zu erreichen, lautet wie folgt:

grades[grades['Score'] >= 90]
Bild vom Autor

Damit bleiben uns nur noch Jack und Hermine. Cool. Aber was genau ist hier passiert? Warum Funktioniert die obige Codezeile? Lassen Sie uns etwas tiefer eintauchen, indem wir uns die Ausgabe des Ausdrucks in den äußeren Klammern oben ansehen:

grades['Score'] >= 90
Bild vom Autor

Ah, okay. Das macht Sinn. Es scheint, dass diese Codezeile ein Pandas-Serienobjekt zurückgibt, das boolesche Werte enthält ( True / False ) Werte, die durch was bestimmt werden >= 90 für jede einzelne Zeile zurückgegeben. Dies ist der entscheidende Zwischenschritt. Anschließend wird diese Reihe boolescher Werte in die äußeren Klammern übernommen und alle Zeilen entsprechend gefiltert.

Der Vollständigkeit halber erwähne ich auch, dass das gleiche Verhalten mit dem erreicht werden kann loc Stichwort:

grades.loc[grades['Score'] >= 90]
Bild vom Autor

Es gibt eine Reihe von Gründen, warum wir uns für die Verwendung entscheiden könnten loc (Eine davon ist, dass es uns tatsächlich ermöglicht, Zeilen und Spalten durch einen einzigen Vorgang zu filtern), aber das eröffnet eine Büchse der Pandora der Pandora-Vorgänge, die wir am besten einem anderen Artikel überlassen.

Im Moment ist das wichtige Lernziel folgendes: Wenn wir in Pandas filtern, ist die verwirrende Syntax keine seltsame Magie. Wir müssen es einfach in seine zwei Komponentenschritte aufteilen: 1) Erhalten einer booleschen Reihe der Zeilen, die unsere Bedingung erfüllen, und 2) Verwenden der Reihe, um den gesamten DataFrame herauszufiltern.

Warum ist das nützlich, fragen Sie sich vielleicht? Nun, im Allgemeinen führt es wahrscheinlich zu verwirrenden Fehlern, wenn Sie nur Operationen verwenden, ohne zu verstehen, wie sie tatsächlich funktionieren. Filtern ist ein nützlicher und äußerst häufiger Vorgang, und Sie wissen jetzt, wie er funktioniert.

Lass uns weitermachen.

Die Schönheit von Lambda-Funktionen

Manchmal erfordern Ihre Daten Transformationen, die einfach nicht in die Funktionalität von Pandas integriert sind. So sehr Sie es auch versuchen, kein noch so großes Durchforsten von Stack Overflow oder sorgfältiges Durchsuchen der Pandas-Dokumentation bringt eine Lösung für Ihr Problem hervor.

Geben Sie Lambda-Funktionen ein – eine nützliche Sprachfunktion, die sich wunderbar in Pandas integrieren lässt.

Hier ein kurzer Überblick über die Funktionsweise von Lambdas:

>>> add_function = lambda x, y: x + y
>>> add_function(2, 3)
5

Lambda-Funktionen unterscheiden sich nicht von regulären Funktionen, außer dass sie eine prägnantere Syntax haben:

  • Funktionsname links vom Gleichheitszeichen
  • Das lambda Schlüsselwort rechts vom Gleichheitszeichen (ähnlich dem def Schlüsselwort in einer herkömmlichen Python-Funktionsdefinition verwenden, teilt dies Python mit, dass wir eine Funktion definieren.
  • Parameter nach dem lambda Schlüsselwort, links vom Doppelpunkt.
  • Rückgabewert rechts vom Doppelpunkt.

Wenden wir nun Lambda-Funktionen auf eine realistische Situation an.

Datensätze weisen häufig ihre eigenen Formatierungsmerkmale auf, die sich auf Unterschiede bei der Dateneingabe und -erfassung beziehen. Daher können die Daten, mit denen Sie arbeiten, ungewöhnlich spezifische Probleme aufweisen, die Sie angehen müssen. Betrachten Sie beispielsweise den folgenden einfachen Datensatz, in dem die Namen und Einkommen von Personen gespeichert sind. Nennen wir es monies.

Bild vom Autor

Nun haben wir als Stammdaten-Hoheiten dieses Unternehmens einige streng geheime Informationen erhalten: Jeder in diesem Unternehmen erhält eine Gehaltserhöhung von 10 % plus zusätzlich 1000 US-Dollar. Dies ist wahrscheinlich eine zu spezifische Berechnung, um eine bestimmte Methode dafür zu finden, aber mit einer Lambda-Funktion ist sie recht einfach:

update_income = Lambda-Zahl: Zahl + (Zahl * .10) + 1000

Dann müssen wir diese Funktion nur noch mit den Pandas nutzen apply Funktion, mit der wir eine Funktion auf jedes Element der ausgewählten Serie anwenden können:

monies['New Income'] = monies['Income'].apply(update_income)
Gelder
Bild vom Autor

Und wir sind fertig! Ein brillanter neuer DataFrame, der genau die Informationen enthält, die wir brauchten, alles in zwei Codezeilen. Um es noch prägnanter zu machen, hätten wir sogar die Lambda-Funktion innerhalb von definieren können apply direkt – ein cooler Tipp, den man im Hinterkopf behalten sollte.

Ich werde den Punkt hier einfach halten.

Lambdas sind äußerst nützlich und sollten daher verwendet werden. Genießen!

Funktionen zur Manipulation von Serienzeichenfolgen

Im vorherigen Abschnitt haben wir über die Vielseitigkeit von Lambda-Funktionen und all die tollen Dinge gesprochen, die Sie mit Ihren Daten erreichen können. Das ist ausgezeichnet, aber Sie sollten aufpassen, dass Sie sich nicht mitreißen lassen. Es kommt unglaublich häufig vor, dass man sich so sehr auf eine vertraute Vorgehensweise einlässt, dass man auf einfachere Abkürzungen verzichtet, mit denen Python Programmierer gesegnet hat. Das gilt natürlich nicht nur für Lambdas, aber wir bleiben vorerst dabei.

Nehmen wir zum Beispiel an, dass wir den folgenden DataFrame aufgerufen haben names Hier werden die Vor- und Nachnamen von Personen gespeichert:

Bild vom Autor

Aufgrund der Platzbeschränkungen in unserer Datenbank entscheiden wir nun, dass es effizienter ist, statt den gesamten Nachnamen einer Person zu speichern, einfach ihren Nachnamen zu speichern. Daher müssen wir das umwandeln 'Last Name' Spalte entsprechend aus. Mit Lambdas könnte unser Versuch etwa so aussehen:

Namen['Nachname'] = Namen['Nachname'].apply(lambda s: s[:1])
Namen
Bild vom Autor

Das funktioniert eindeutig, ist aber etwas umständlich und daher nicht so pythonisch, wie es sein könnte. Glücklicherweise gibt es angesichts der Schönheit der String-Manipulationsfunktionen in Pandas eine andere, elegantere Möglichkeit (für die nächste Codezeile gehen Sie einfach davon aus, dass wir sie noch nicht geändert haben 'Last Name' Spalte mit dem obigen Code):

Namen['Nachname'] = Namen['Nachname'].str[:1]
Namen
Bild vom Autor

Ta-da! Der .str Mit der Eigenschaft einer Pandas-Serie können wir jeden String in der Serie mit einer bestimmten String-Operation verbinden, als ob wir mit jedem String einzeln arbeiten würden.

Aber warte, es wird besser. Seit .str ermöglicht uns effektiv den Zugriff auf die normale Funktionalität eines Strings über die Serie. Wir können auch eine Reihe von String-Funktionen anwenden, um die schnelle Verarbeitung unserer Daten zu unterstützen! Angenommen, wir beschließen, beide Spalten in Kleinbuchstaben umzuwandeln. Der folgende Code erledigt die Aufgabe:

Namen['Vorname'] = Namen['Vorname'].str.lower()
Namen['Nachname'] = Namen['Nachname'].str.lower()
Namen
Bild vom Autor

Viel einfacher, als sich die Mühe zu machen, eigene Lambda-Funktionen zu definieren und die darin enthaltenen String-Funktionen aufzurufen. Nicht, dass ich Lambdas nicht liebe – aber alles hat seinen Platz und Einfachheit sollte in Python immer Vorrang haben.

Ich habe hier nur einige Beispiele behandelt, aber Ihnen steht eine große Sammlung von Stringfunktionen zur Verfügung [1].

Benutzen Sie sie großzügig. Sie sind ausgezeichnet.

Abschließende Gedanken und Zusammenfassung

Hier ist ein kleiner Spickzettel zur Datentransformation für Sie:

  1. Filtern Sie so, wie Sie es meinen. Erfahren Sie, was wirklich vor sich geht, damit Sie wissen, was Sie tun.
  2. Ich liebe deine Lambdas. Sie können Ihnen dabei helfen, Daten auf erstaunliche Weise zu manipulieren.
  3. Pandas liebt Saiten genauso wie du. Es gibt viele integrierte Funktionen – Sie können sie genauso gut nutzen.

Hier noch ein letzter Ratschlag: Es gibt keine „richtige“ Möglichkeit, einen Datensatz zu filtern. Dies hängt von den vorliegenden Daten sowie dem individuellen Problem ab, das Sie lösen möchten. Obwohl es keine feste Methode gibt, die Sie jedes Mal befolgen können, steht Ihnen eine nützliche Sammlung von Werkzeugen zur Verfügung, die es wert sind, zur Verfügung zu stehen. In diesem Artikel habe ich drei davon besprochen.

Ich ermutige Sie, hinauszugehen und noch mehr zu finden.

Bibliographie

[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas

Stammdatentransformation in Pandas mit diesen drei nützlichen Techniken, neu veröffentlicht aus der Quelle https://towardsdatascience.com/master-data-transformation-in-pandas-with-these- three-useful-techniques-20699f03e51d?source=rss—-7f60cf5620c9— 4 über https://towardsdatascience.com/feed

<!–

->

Zeitstempel:

Mehr von Blockchain-Berater