Mein Spickzettel von Pandas

Ein Lehrer hat mir einmal gesagt, wenn Sie nach einem Analogon eines Programmierers in der Welt der BĂŒcher suchen, stellt sich heraus, dass Programmierer nicht wie LehrbĂŒcher, sondern wie Inhaltsverzeichnisse sind: Sie erinnern sich nicht an alles, aber sie wissen, wie sie schnell finden, was sie brauchen.

Die FĂ€higkeit, Funktionsbeschreibungen schnell zu finden, ermöglicht es Programmierern, produktiv zu arbeiten, ohne den Status des Streams zu verlieren. Aus diesem Grund habe ich das hier vorgestellte Spickzettel erstellt pandasund darin enthalten, was ich jeden Tag verwende, um Webanwendungen und Modelle fĂŒr maschinelles Lernen zu erstellen. Dies ist keine vollstĂ€ndige Liste der Funktionen , enthĂ€lt jedoch die Funktionen, die ich am hĂ€ufigsten verwende, Beispiele und meine ErklĂ€rungen zu Situationen, in denen diese Funktionen besonders nĂŒtzlich sind.



pandas

1. Vorbereitung auf die Arbeit


Wenn Sie unabhÀngig testen möchten, was hier besprochen wird, laden Sie den Datensatz der Anime Recommendations Database von Kaggle herunter. Entpacken Sie es und legen Sie es in demselben Ordner ab, in dem sich Ihr Jupyter-Notizbuch befindet (im Folgenden: Notizblock).

FĂŒhren Sie nun die folgenden Befehle aus.

import pandas as pd
import numpy as np
anime = pd.read_csv('anime-recommendations-database/anime.csv')
rating = pd.read_csv('anime-recommendations-database/rating.csv')
anime_modified = anime.set_index('name')

Danach sollten Sie in der Lage sein, das zu reproduzieren, was ich in den folgenden Abschnitten dieses Materials zeigen werde.

2. Daten importieren


▍ Laden Sie CSV-Daten herunter


Hier möchte ich ĂŒber die direkte Konvertierung von CSV-Daten in Datenrahmen (in Datenrahmen) sprechen. Manchmal mĂŒssen Sie beim Herunterladen von Daten im CSV-Format deren Codierung angeben (z. B. kann dies so aussehen encoding='ISO-8859–1'). Dies ist das erste, was Sie versuchen sollten, wenn sich herausstellt, dass der Datenrahmen nach dem Laden der Daten unlesbare Zeichen enthĂ€lt.

anime = pd.read_csv('anime-recommendations-database/anime.csv')


Heruntergeladene CSV-Daten

Es gibt eine Àhnliche Funktion zum Laden von Daten aus Excel-Dateienpd.read_excel.

▍Erstellen Sie einen Datenrahmen aus manuell eingegebenen Daten


Dies kann nĂŒtzlich sein, wenn Sie einfache Daten manuell in das Programm eingeben mĂŒssen. Zum Beispiel, wenn Sie die Änderungen auswerten mĂŒssen, die Daten durchlaufen, die die Datenverarbeitungspipeline durchlaufen.

df = pd.DataFrame([[1,'Bob', 'Builder'],
                  [2,'Sally', 'Baker'],
                  [3,'Scott', 'Candle Stick Maker']], 
columns=['id','name', 'occupation'])


Manueller Eintrag

▍ Kopieren eines Datenrahmens


Das Kopieren von Datenrahmen kann in Situationen nĂŒtzlich sein, in denen Sie Änderungen an diesen Daten vornehmen mĂŒssen, aber auch das Original speichern mĂŒssen. Wenn Datenrahmen kopiert werden mĂŒssen, wird empfohlen, dies sofort nach dem Herunterladen zu tun.

anime_copy = anime.copy(deep=True)


Kopie des Datenrahmens

3. Datenexport


▍ In CSV-Format exportieren


Beim Exportieren von Daten werden diese im selben Ordner wie der Editor gespeichert. Im Folgenden finden Sie ein Beispiel fĂŒr das Speichern der ersten 10 Zeilen eines Datenrahmens. Was genau gespeichert werden soll, hĂ€ngt jedoch von der jeweiligen Aufgabe ab.

rating[:10].to_csv('saved_ratings.csv', index=False)

Mit der Funktion können Sie Daten als Excel-Dateien exportieren df.to_excel.

4. Daten anzeigen und recherchieren


▍ Abrufen von n DatensĂ€tzen vom Anfang oder Ende des Datenrahmens


nLassen Sie uns zunĂ€chst ĂŒber die Ausgabe der ersten Elemente des Datenrahmens sprechen . Ich schließe oft eine Reihe von Elementen vom Anfang eines Datenrahmens irgendwo in einem Notizbuch ab. Auf diese Weise kann ich bequem auf diese Daten zugreifen, falls ich vergesse, was genau sich im Datenrahmen befindet. Die Schlussfolgerung der letzten Elemente spielt eine Ă€hnliche Rolle.

anime.head(3)
rating.tail(1)


Daten vom Anfang des Datenrahmens


Daten vom Ende des Datenrahmens

▍ ZĂ€hlen der Anzahl der Zeilen in einem Datenrahmen


Die Funktion len(),, die ich hier zeigen werde, ist nicht enthalten pandas. Es ist jedoch gut geeignet, um die Anzahl der Zeilen von Datenrahmen zu zÀhlen. Die Ergebnisse seiner Arbeit können in einer Variablen gespeichert und dort verwendet werden, wo sie benötigt werden.

len(df)
#=> 3

▍ZĂ€hlen der Anzahl eindeutiger Werte in einer Spalte


Um die Anzahl der eindeutigen Werte in einer Spalte zu berechnen, können Sie diese Konstruktion verwenden:

len(ratings['user_id'].unique())

▍ Abrufen von Datenrahmeninformationen


Informationen zum Datenrahmen enthalten allgemeine Informationen dazu, wie z. B. den Header, die Anzahl der Werte und die Datentypen der Spalten.

anime.info()


Datenrahmeninformationen

Es gibt eine andere Funktion Àhnlichdf.info-df.dtypes. Es werden nur Informationen zu den Datentypen der Spalten angezeigt.

▍Anzeigen von Statistiken zum Datenrahmen


Die Kenntnis der statistischen Informationen ĂŒber den Datenrahmen ist in Situationen sehr nĂŒtzlich, in denen er viele numerische Werte enthĂ€lt. Wenn Sie beispielsweise die Durchschnitts-, Minimal- und Maximalwerte einer Spalte kennen rating, erhalten Sie einen Einblick in das gesamte Erscheinungsbild des Datenrahmens. Hier ist der entsprechende Befehl:

anime.describe()


Datenrahmenstatistik

▍Zahlberechnung


Um die Anzahl der Werte in einer bestimmten Spalte zu berechnen, können Sie die folgende Konstruktion verwenden:

anime.type.value_counts()


ZĂ€hlen Sie die Anzahl der Elemente in einer Spalte

5. Extrahieren von Informationen aus Datenrahmen


▍Erstellen einer Liste oder eines Serienobjekts basierend auf Spaltenwerten


Dies kann in FĂ€llen nĂŒtzlich sein, in denen Sie die Werte der Spalten in Variablen extrahieren xund ydas Modell trainieren möchten . Hier gelten folgende Befehle:

anime['genre'].tolist()
anime['genre']


Die Ergebnisse des Befehls anime ['genre']. Tolist ()


Anime ['Genre'] Teamergebnisse

▍Eine Liste von Werten aus einem Index abrufen


Lassen Sie uns ĂŒber das Abrufen von Wertelisten aus einem Index sprechen. Bitte beachten Sie, dass ich hier den Datenrahmen verwendet habe anime_modified, da seine Indexwerte interessanter aussehen.

anime_modified.index.tolist()


Teamergebnisse

▍Eine Liste mit Spaltenwerten abrufen


Hier ist ein Befehl, mit dem Sie eine Liste der Spaltenwerte abrufen können:

anime.columns.tolist()


Teamergebnisse

6. HinzufĂŒgen von Daten zum Datenrahmen und Entfernen aus diesem


▍Verbinden einer neuen Spalte mit einem angegebenen Wert mit dem Datenrahmen


Manchmal muss ich Datenrahmen neue Spalten hinzufĂŒgen. Zum Beispiel - in FĂ€llen, in denen ich Test- und TrainingssĂ€tze in zwei verschiedenen Datenrahmen habe und bevor ich sie kombiniere, muss ich sie markieren, damit sie spĂ€ter unterschieden werden können. Hierzu wird folgende Konstruktion verwendet:

anime['train set'] = True

▍Erstellen Sie einen neuen Datenrahmen aus einer Teilmenge von Spalten


Dies kann nĂŒtzlich sein, wenn Sie mehrere Spalten eines großen Datenrahmens im neuen Datenrahmen speichern möchten, aber nicht die Namen der Spalten notieren möchten, die Sie löschen möchten.

anime[['name','episodes']]


Befehlsergebnis

▍ Löschen Sie die angegebenen Spalten


Diese Technik kann nĂŒtzlich sein, wenn Sie nur wenige Spalten aus dem Datenrahmen entfernen mĂŒssen. Wenn Sie viele Spalten löschen mĂŒssen, kann diese Aufgabe ziemlich langwierig sein. Daher bevorzuge ich hier die im vorherigen Abschnitt beschriebene Gelegenheit.

anime.drop(['anime_id', 'genre', 'members'], axis=1).head()


Teamergebnisse

▍ HinzufĂŒgen einer Zeile mit der Summe der Werte aus anderen Zeilen zum Datenrahmen


Um dieses Beispiel zu demonstrieren, erstellen wir unabhĂ€ngig einen kleinen Datenrahmen, mit dem Sie bequem arbeiten können. Das Interessanteste dabei ist das Design df.sum(axis=0), mit dem Sie die Summe der Werte aus verschiedenen Zeilen abrufen können. 

df = pd.DataFrame([[1,'Bob', 8000],
                  [2,'Sally', 9000],
                  [3,'Scott', 20]], columns=['id','name', 'power level'])
df.append(df.sum(axis=0), ignore_index=True)


Das Ergebnis des Befehls

Mit dem Befehl der Ansichtdf.sum(axis=1)können Sie die Werte in den Spalten summieren.

Ein Ă€hnlicher Mechanismus gilt auch fĂŒr die Berechnung von Durchschnittswerten. Zum Beispiel -df.mean(axis=0).

7. Datenrahmen kombinieren


▍ Verkettung von zwei Datenrahmen


Diese Technik ist in Situationen anwendbar, in denen zwei Datenrahmen mit denselben Spalten kombiniert werden mĂŒssen.

In diesem Beispiel teilen wir zuerst den Datenrahmen in zwei Teile und kombinieren diese Teile dann erneut:

df1 = anime[0:2]
df2 = anime[2:4]
pd.concat([df1, df2], ignore_index=True)


Datenrahmen df1


Datenrahmen df2


Datenrahmen kombiniert df1 und df2

▍ Datenrahmen zusammenfĂŒhren


Die Funktion df.merge, die wir hier betrachten werden, Ă€hnelt der linken SQL-VerknĂŒpfung. Es wird verwendet, wenn zwei Datenrahmen in einer bestimmten Spalte kombiniert werden mĂŒssen.

rating.merge(anime, left_on=’anime_id’, right_on=’anime_id’, suffixes=(‘_left’, ‘_right’))


Teamergebnisse

8. Filtern


▍Zeilen mit den gewĂŒnschten Indexwerten abrufen


Die Indexwerte des Datenrahmens anime_modifiedsind die Namen des Animes. Beachten Sie, wie wir diese Namen verwenden, um bestimmte Spalten auszuwÀhlen.

anime_modified.loc[['Haikyuu!! Second Season','Gintama']]


Teamergebnisse

▍Ketten nach numerischen Indizes abrufen


Diese Technik unterscheidet sich von der im vorherigen Abschnitt beschriebenen. Bei Verwendung der Funktion wird der df.ilocersten Zeile ein Index zugewiesen 0, der zweiten ein Index 1usw. Solche Indizes werden Zeilen zugewiesen, auch wenn der Datenrahmen geÀndert wurde und Zeichenfolgenwerte in seiner Indexspalte verwendet werden.

Mit der folgenden Konstruktion können Sie die ersten drei Zeilen des Datenrahmens auswÀhlen:

anime_modified.iloc[0:3]


Teamergebnisse

▍Zeilen nach angegebenen Spaltenwerten abrufen


Mit dem folgenden Befehl können Sie Zeilen eines Datenrahmens abrufen, wenn eine Liste mit Spaltenwerten vorhanden ist:

anime[anime['type'].isin(['TV', 'Movie'])]


Die Ergebnisse des Befehls

Wenn wir an einer einzigen Bedeutung interessiert sind, können Sie dieses Design verwenden:

anime[anime[‘type’] == 'TV']

▍Erhalten eines Datenrahmen-Slice


Diese Technik Àhnelt dem Abrufen eines Teils einer Liste. Wir sprechen nÀmlich davon, ein Fragment eines Datenrahmens zu erhalten, der Zeilen enthÀlt, die einer bestimmten Indexkonfiguration entsprechen.

anime[1:3]


Teamergebnisse

▍ Filtern nach Wert


Aus Datenrahmen können Sie die Zeilen auswÀhlen, die der angegebenen Bedingung entsprechen. Bitte beachten Sie, dass bei Verwendung dieser Methode vorhandene Indexwerte erhalten bleiben.

anime[anime['rating'] > 8]


Teamergebnisse

9. Sortieren


Um Datenrahmen nach Spaltenwerten zu sortieren, können Sie die folgende Funktion verwenden df.sort_values:

anime.sort_values('rating', ascending=False)


Teamergebnisse

10. Aggregation


▍Df.groupby-Funktion und ZĂ€hlen der Anzahl der DatensĂ€tze


So zÀhlen Sie die Anzahl der DatensÀtze mit unterschiedlichen Werten in Spalten:

anime.groupby('type').count()


Teamergebnisse

▍ df.groupby-Funktion und Spaltenaggregation auf verschiedene Arten


Achten Sie darauf, was hier verwendet wird reset_index(). Andernfalls wird die Spalte typezu einer Indexspalte. In den meisten FĂ€llen empfehle ich dasselbe.

anime.groupby(["type"]).agg({
  "rating": "sum",
  "episodes": "count",
  "name": "last"
}).reset_index()

▍Erstellen Sie eine Pivot-Tabelle


Um einige Daten aus dem Datenrahmen zu extrahieren, gibt es nichts Besseres als eine Pivot-Tabelle. Bitte beachten Sie, dass ich hier den Datenrahmen ernsthaft gefiltert habe, was die Erstellung der Pivot-Tabelle beschleunigte.

tmp_df = rating.copy()
tmp_df.sort_values('user_id', ascending=True, inplace=True)
tmp_df = tmp_df[tmp_df.user_id < 10
tmp_df = tmp_df[tmp_df.anime_id < 30]
tmp_df = tmp_df[tmp_df.rating != -1]
pd.pivot_table(tmp_df, values='rating', index=['user_id'], columns=['anime_id'], aggfunc=np.sum, fill_value=0)


Teamergebnisse

11. Datenbereinigung


▍ Schreiben Sie in Zellen, die den NaN-Wert eines anderen Werts enthalten


Hier sprechen wir ĂŒber das Schreiben von Werten 0in Zellen, die den Wert enthalten NaN. In diesem Beispiel erstellen wir dieselbe Pivot-Tabelle wie zuvor, jedoch ohne Verwendung fill_value=0. Verwenden Sie dann die Funktion fillna(0), um die Werte NaNdurch zu ersetzen 0.

pivot = pd.pivot_table(tmp_df, values='rating', index=['user_id'], columns=['anime_id'], aggfunc=np.sum)
pivot.fillna(0)


Tabelle mit NaN-Werten


Ergebnisse des Ersetzens von NaN-Werten durch 0

12. Weitere nĂŒtzliche Funktionen


▍ Zufallsstichproben aus einem Datensatz


Ich benutze die Funktion df.samplejedes Mal, wenn ich einen kleinen zufĂ€lligen Satz von Zeilen aus einem großen Datenrahmen abrufen muss. Wenn ein Parameter verwendet wird frac=1, können Sie mit der Funktion ein Analogon des ursprĂŒnglichen Datenrahmens erhalten, dessen Zeilen gemischt werden.

anime.sample(frac=0.25)


Teamergebnisse

▍AuswĂ€hlen von Datenrahmenzeilen


Mit der folgenden Konstruktion können Sie die Zeilen eines Datenrahmens durchlaufen:

for idx,row in anime[:2].iterrows():
    print(idx, row)


Teamergebnisse

▍ Die BekĂ€mpfung der IOPub-Datenrate hat den Fehler ĂŒberschritten


Wenn Sie auf einen Fehler stoßen IOPub data rate exceeded, verwenden Sie beim Starten von Jupyter Notebook den folgenden Befehl:

jupyter notebook — NotebookApp.iopub_data_rate_limit=1.0e10

Zusammenfassung


Hier habe ich ĂŒber einige nĂŒtzliche pandasTricks fĂŒr die Verwendung der Jupyter Notebook-Umgebung gesprochen. Ich hoffe, mein Spickzettel ist nĂŒtzlich.

Liebe Leser! Gibt es Möglichkeiten, pandasohne die Sie sich Ihre tÀgliche Arbeit nicht vorstellen können?


All Articles