Michael Macaulay

Muss Pandas Functions für Machine Learning Journey kennen

Quellknoten: 1865356

Dieser Artikel wurde als Teil des veröffentlicht Data-Science-Blogathon

Einleitung

Nun, es besteht eine gute Möglichkeit, dass Sie das können!

Für Datenwissenschaftler, die Python als primäre Programmiersprache verwenden, ist das Pandas-Paket ein unverzichtbares Datenanalysetool. Das Pandas-Paket enthält alles, was ein Datenwissenschaftler braucht, und in jedem Kurs haben wir zunächst gelernt, wie man es nutzt. Es ist so groß, leistungsstark und führt fast jede Tabellenmanipulation aus, die Sie sich vorstellen können. Diese Breite kann jedoch manchmal ein Nachteil sein.

Es verfügt über viele schöne Funktionen, die seltene Randfälle und verschiedene Szenarien lösen.

Einer der Hauptnachteile von Pandas besteht darin, dass es Probleme mit großen Datensätzen hat, da Pandas seine Datenstrukturen im RAM speichert, was mit zunehmender Datengröße nicht mehr ausreichen kann. Verwenden Sie dazu PySpark oder Dask.

Auch wenn das Pandas-Paket weit verbreitet ist, gibt es immer noch viele Funktionen, die Menschen möglicherweise übersehen, sei es, weil es seltener genutzt wird oder weil sie sich seiner Existenz nicht bewusst sind. Dieser Beitrag soll Sie mit diesen Funktionen vertraut machen und zeigen, dass Pandas weitaus kompetenter ist, als Sie bisher wussten.

Pipe

Um die Datenbereinigung in Pandas auf prägnante und kompakte Weise durchzuführen, können Sie Pipe-Funktionen verwenden, mit denen Sie mehrere Funktionen in einem Vorgang kombinieren können.

Wenn Sie beispielsweise Funktionen wie „drop_duplicates“, „encode_categoricals“ und „remove_outliers“ anwenden möchten, die ihre Argumente akzeptieren.

df_cleaned = (diamonds.pipe(drop_duplicates). pipe(remove_outliers, ['price', 'carat', ' Depth']). pipe(encode_categoricals, ['cut', 'color', 'clarity']) )

Faktorisieren

Diese Funktion ist eine Alternative zum Sklearns Label Encoder.

# Beachten Sie die [0] am Ende. diamanten["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> diamanten["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Name: cut_enc, dtype: int64

Die Faktorisierung ergibt ein Tupel von Werten: den codierten Wert und eine Liste eindeutiger Kategorien.

Werte, einzigartig = pd.factorize(Diamonds["cut"], sort=True) >>> Werte[:10] Array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> unique ['Ideal', 'Premium', 'Sehr gut', 'Gut', 'Fair']

Explodieren

Explodieren | Pandas-Funktionen

Photo by Edewaa Foster on Unsplash

Explode ist eine Funktion mit einem interessanten Namen. Beginnen wir mit einem Beispiel und dann einer Erklärung:

df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("dirty") >>> df
Daten | Pandas-Funktionen
Bild vom Autor

Die Feature-Spalte besteht aus zwei Zeilen, die mit Listen gekennzeichnet sind. Diese Art von Daten ist in Umfragen verfügbar, bei denen für einige Fragen mehrere Antworten möglich sind.

>>> df.explode("dirty",ignore_index=True)
Daten explodieren
Bild vom Autor

Diese Funktion nimmt eine Zelle mit einem Array von Werten und zerlegt sie in mehrere Zeilen. Um die Reihenfolge eines numerischen Index beizubehalten, verwenden Sie „ignore_index“ als „True“.

Zwischen

Für die boolesche Indizierung numerischer Merkmale innerhalb eines Bereichs gibt es hier eine praktische Funktion:

# Holen Sie sich Diamanten mit einem Preis zwischen 3500 und 3700 Dollar. diamanten[diamonds["price"].between(3500, 3700, inclusive="neither")].sample(5)
zwischen Daten | Pandas-Funktionen
Bild vom Autor

 

T

DataFrame verfügt über ein einfaches T-Attribut, das als Transpose bezeichnet wird. Wir verwenden es möglicherweise nicht oft. Die Beschreibungsmethode ist beim Anzeigen der Datenrahmen hilfreich.

>>> boston.describe().T.head(10)
transponieren
Bild vom Autor

 

Pandas-Optionen

Man kann globale Einstellungen von Pandas verwenden, um das Standardverhalten zu optimieren und zu ändern.

>>> dir(pd.options) ['compute', 'display', 'io', 'mode', 'plotting']

Es besteht aus 5 Modulen. Sehen wir uns die verfügbaren Optionen unter dem Display an. Es stehen viele Optionen zur Verfügung, aber ich verwende meistens max_columns.

>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show_dimensions', 'unicode' , 'Breite']

Die meisten Leute verwenden max_columns und precision

# Entfernen Sie die Beschränkung, um die Anzahl der Spalten anzuzeigen pd.options.display.max_columns = None # Nur 5 Zahlen nach der Dezimalstelle anzeigen pd.options.display.precision = 5 # Entfernt die wissenschaftliche Notation

Convert_dtypes

Wir alle wissen, dass Pandas die lästige Angewohnheit haben, einige Spalten als Objektdatentypen zu markieren. Anstatt ihre Typen direkt zu definieren, können Sie die Methode „convert dtypes“ verwenden, die versucht, den besten Datentyp abzuleiten:

sample = pd.read_csv("data/station_day.csv",usecols=["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes StationId-Objekt CO float64 O3 float64 AQI_Bucket-Objekt-Dtype: Objekt >>> sample.convert_dtypes().dtypes StationId string CO float64 O3 float64 AQI_Bucket string dtype: Objekt

Select_dtypes

Aus dem Namen geht meines Erachtens klar hervor, was die Funktion bewirkt. Sie können die Optionen „Einschließen“ und „Ausschließen“ verwenden, um Spalten anzugeben, die bestimmte Datentypen einschließen oder weglassen.

Wählen Sie nur numerische Spalten mit np.number, zum Beispiel:

# Wählen Sie nur numerische Spalten aus. diamonds.select_dtypes(include=np.number).head()
Wählen Sie D-Typen aus
Bild vom Autor

 

Maske

Diese Funktion hilft beim Ersetzen von Werten, bei denen die benutzerdefinierte Bedingung nicht erfüllt ist.

# Beispieldaten erstellen ages = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("ages") ages
Maske | Daten
Bild vom Autor

Nachdem Sie den oben genannten Vorgang ausgeführt haben.

Maskierung durchgeführt
Bild vom Autor

Min und Max

Obwohl min und max bekannt sind, weist es für einige Randfälle einige bessere Eigenschaften auf.

index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] Bibliotheken = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) für lib in Bibliotheken}, index=index ) >>> df
min. und max
Bild vom Autor 

Der fiktive DataFrame oben zeigt die Ergebnisse von vier verschiedenen Gradient-Boosting-Bibliotheken für fünf Datensätze. Wir suchen nach dem Paket, das bei jedem Datensatz am besten abschneidet. So schaffen Sie es mit max auf stilvolle Weise:

>>> df.max(axis=1) Diamanten 99.52684 Titanic 99.63650 Iris 99.10989 Herzkrankheit 99.31627 Kreditausfall 97.96728 dtype: float64

Ngrößte und Nkleinste

Die ngrößten und nkleinsten Werte sind hilfreich, um die oberen N- oder ~(obersten N)-Werte einer Variablen anzuzeigen.

diamanten.nlargest(5, „Preis“)
größte und kleinste
Bild vom Autor
diamanten.nsmallest(5, „Preis“)
nkleinste
Bild vom Autor

 

Idxmax und Idxmin

Pandas geben die größte/kleinste Zahl zurück, wenn Sie Max oder Min für eine Spalte aufrufen. Es gibt jedoch Situationen, in denen Sie die Position des Min/Max-Werts benötigen, die diese Funktionen nicht liefern.

Stattdessen können Sie idxmax/idxmin verwenden:

>>> diamanten.preis.idxmax() 27749 >>> diamanten.karat.idxmin() 14

Value_Counts

Eine übliche Methode, um den Prozentsatz der fehlenden Werte zu ermitteln, besteht darin, isnull und sum zu kombinieren und durch die Größe des Arrays zu dividieren.

Aber value_counts mit relevanten Argumenten macht dasselbe:

housing = pd.read_csv("train.csv") >>> housing["FireplaceQu"].value_counts(dropna=False, normalize=True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Ex 0.01644 Po 0.01370 Name: FireplaceQu, dtype: float64

Beschneiden

Die Clip-Funktion hilft, Ausreißer außerhalb eines Bereichs zu finden und durch harte Grenzwerte zu ersetzen.

>>> ages.clip(50, 60)
Daten für Clip
Bild vom Autor

 

At_time und Between_time

Diese Funktionen sind hilfreich bei der Arbeit mit Zeitreihen mit hoher Granularität.

at_time hilft dabei, Werte zu einem bestimmten Datum oder einer bestimmten Uhrzeit abzurufen.

index = pd.date_range("2021-08-01", Perioden=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.head()
at_time-Beispiel | Pandas-Funktionen
Bild vom Autor

>>> df.at_time(“15:00”)

.at_time | Pandas-Funktionen
Bild vom Autor

between_time wird zum Abrufen von Zeilen innerhalb eines benutzerdefinierten Bereichs verwendet.

from datetime import datetime >>> df.between_time("09:45", "12:00")
between_time
Bild vom Autor

 

Bdate_range

Diese Funktion hilft bei der Erstellung von Zeitreihenindizes mit Geschäftstagsfrequenz. Die Finanzwelt hat diese Art von Frequenz. Daher kann diese Funktion zum Zeitpunkt der Neuindizierung von Zeitreihen mit der Neuindizierungsfunktion hilfreich sein.

series = pd.bdate_range("2021-01-01", "2021-01-31") # Ein Zeitraum von einem Monat >>> len(series) 21

At und Iat

Diese beiden Zugriffsmethoden sind wesentlich schneller als loc und iloc. Allerdings haben sie einen Nachteil. Sie ermöglichen Ihnen jeweils nur die Auswahl oder das Ersetzen eines Werts:

# [index, label] >>> diamanten.at[234, "cut"] 'Ideal' # [index, index] >>> diamanten.iat[1564, 4] 61.2 # Ersetzen Sie die 16541. Zeile der Preisspalte >> > diamanten.at[16541, „Preis“] = 10000

Argsort

Diese Funktion hilft beim Extrahieren von Indizes, die ein Array der Features sortieren würden.

Tips.reset_index(inplace=True, drop=True) sort_idx = Tips["total_bill"].argsort(kind="mergesort") # Sortieren Sie nun „tips“ basierend auf total_bill Tips.iloc[sort_idx].head()
arg_sort
Bild vom Autor

 

Katzenzubehör

Die Pandas ermöglichen integrierte Python-Funktionen für Datumsangaben und Zeichenfolgen mithilfe von Zugriffsmethoden wie str oder dt.

>>> diamanten.dtypes karat float64 schnittkategorie farbe kategorie klarheit kategorie tiefe float64 tabelle float64 preis int64 x float64 y float64 z float64 cut_enc int64 dtype: objekt

Mit dem Cat-Accessor können viele Sonderfunktionen für kategoriale Spalten verwendet werden. Es verfügt über Funktionen wie Kategorien zum Finden eindeutiger Elemente und rename_categories zum Umbenennen von Funktionen.

Diamonds["new_cuts"] = Diamonds["Cut"].cat.rename_categories(list("ABCDE")) >>> Diamonds["New_cuts"].cat.categories Index(['A', 'B', ' C', 'D', 'E'], dtype='object')

Eine weitere Liste der Funktionen finden Sie weiter unten Katzenzubehör.

Squeeze

Squeeze ist eine Funktion, die in seltenen, aber erschwerenden Randsituationen verwendet wird.

Wenn ein einzelner Wert von einer Bedingung zurückgegeben wird, die zur Teilmenge eines DataFrame verwendet wird, ist dies einer dieser Fälle. Stellen Sie sich das folgende Szenario vor:

Teilmenge = diamanten.loc[diamonds.index >> Teilmenge
Preis

Auch wenn nur eine Zelle vorhanden ist, wird der DataFrame zurückgegeben. Dies ist unpraktisch, da Sie jetzt.loc sowohl mit dem Spaltennamen als auch mit dem Index verwenden müssen, um den Preis zu erhalten.

Das ist nicht nötig, wenn Sie wissen, wie man drückt. Mit dieser Funktion kann eine Achse aus einem Einzelzellen-DataFrame oder einer Serie entfernt werden. Stellen Sie sich das folgende Szenario vor:

>>> subset.squeeze() 326

Es ist möglich, die zu entfernende Achse anzugeben. Es hatte jetzt nur noch Skalar zurückgegeben.

>>> subset.squeeze("columns") # oder "rows" 0 326 Name: Preis, Dtype: int64

Beachten Sie, dass diese Funktion nur für Serien oder DataFrames mit einzelnen Werten funktioniert.

Excel_writer

Es handelt sich um eine generische Klasse zum Erstellen von Excel-Dateien und zum Schreiben von DataFrame darin. Bedenken Sie, wir haben diese beiden Datensätze.

# Laden Sie zwei Datensätze. Diamonds = sns.load_dataset("diamonds") Tips = sns.load_dataset("tips") # Schreiben Sie in dieselbe Excel-Datei mit pd.ExcelWriter("data/data.xlsx") als Writer: Diamonds.to_excel (writer, sheet_name="diamonds") Tips.to_excel(writer, sheet_name="tips")

Es verfügt über Eigenschaften zum Angeben des zu verwendenden DateTime-Formats, ob Sie eine neue Datei benötigen oder eine vorhandene ändern möchten und was passiert, wenn ein Blatt vorhanden ist. Überprüfen Sie dies Dokumentation für weitere Informationen an.

Zusammenfassung

Es handelt sich nicht um einen erschöpfenden Überblick über Pandas Dokumentation enthält weitere Informationen zum Code und den Funktionen. Ich empfehle Ihnen, mit verschiedenen Variationen der hier bereitgestellten Codeschnipsel sowie verschiedenen Parametern zu experimentieren. Auf diese Weise kann man die Macht der Pandas vollständig verstehen.

Bibliotheken wie Dask und datatable verdrängen Pandas nach und nach mit ihren auffälligen neuen Funktionen für die Verarbeitung großer Datenmengen. Pandas bleibt das am häufigsten verwendete Datenmanipulationstool in der Python-Data-Science-Community. Aufgrund ihrer guten Integration in den aktuellen SciPy-Stack dient die Bibliothek als Vorbild für andere Pakete, denen sie folgen und sie erstellen können.

Ich hoffe, dass Sie diesen Beitrag aufschlussreich fanden und danke Ihnen fürs Lesen.

Die in diesem Artikel gezeigten Medien sind nicht Eigentum von Analytics Vidhya und werden nach Ermessen des Autors verwendet.

Quelle: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

Zeitstempel:

Mehr von Analytics-Vidhya