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 pandas
und 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-DatenEs 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 Datenrahmens3. 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
n
Lassen 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 DatenrahmensDaten 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)
â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()
DatenrahmeninformationenEs 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 Spalte5. 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 x
und y
das 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()
Teamergebnisse6. 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 BefehlsMit 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 df1Datenrahmen df2Datenrahmen 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â))
Teamergebnisse8. Filtern
âZeilen mit den gewĂŒnschten Indexwerten abrufen
Die Indexwerte des Datenrahmens anime_modified
sind 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.iloc
ersten Zeile ein Index zugewiesen 0
, der zweiten ein Index 1
usw. 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 BefehlsWenn 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]
Teamergebnisse9. Sortieren
Um Datenrahmen nach Spaltenwerten zu sortieren, können Sie die folgende Funktion verwenden df.sort_values
:anime.sort_values('rating', ascending=False)
Teamergebnisse10. 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 type
zu 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)
Teamergebnisse11. Datenbereinigung
â Schreiben Sie in Zellen, die den NaN-Wert eines anderen Werts enthalten
Hier sprechen wir ĂŒber das Schreiben von Werten 0
in 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 NaN
durch 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-WertenErgebnisse des Ersetzens von NaN-Werten durch 012. Weitere nĂŒtzliche Funktionen
â Zufallsstichproben aus einem Datensatz
Ich benutze die Funktion df.sample
jedes 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 pandas
Tricks fĂŒr die Verwendung der Jupyter Notebook-Umgebung gesprochen. Ich hoffe, mein Spickzettel ist nĂŒtzlich.Liebe Leser! Gibt es Möglichkeiten, pandas
ohne die Sie sich Ihre tÀgliche Arbeit nicht vorstellen können?