Pandas Grundlegende Datenbereinigung

PandasBeginner
Jetzt üben

Einführung

Willkommen zum Pandas Basic Data Cleaning Lab. Datenbereinigung ist ein entscheidender erster Schritt in jedem Datenanalyse- oder Machine-Learning-Projekt. Reale Daten sind oft unsauber und enthalten fehlende Werte, doppelte Einträge oder falsche Datentypen. Die Verwendung von rohen, unbereinigten Daten kann zu ungenauen Analysen und unzuverlässigen Schlussfolgerungen führen.

Pandas ist eine leistungsstarke Python-Bibliothek, die hochperformante, einfach zu bedienende Datenstrukturen und Datenanalysetools bereitstellt. Es ist das Standardwerkzeug für Datenbereinigung und -manipulation in Python.

In diesem Lab lernen Sie die grundlegenden Techniken zur Bereinigung eines Datensatzes mit Pandas. Sie werden üben:

  • Zeilen mit fehlenden Werten mit dropna() löschen.
  • Fehlende Werte mit fillna() auffüllen.
  • Doppelte Zeilen mit drop_duplicates() entfernen.
  • Spalten mit rename() umbenennen.
  • Datentypen von Spalten mit astype() konvertieren.

Am Ende dieses Labs werden Sie ein solides Verständnis des grundlegenden Datenbereinigungs-Workflows in Pandas haben.

Zeilen mit der dropna-Methode löschen

In diesem Schritt lernen Sie, wie Sie fehlende Daten behandeln, indem Sie Zeilen löschen, die Nullwerte enthalten. In Pandas werden fehlende Daten durch NaN (Not a Number) dargestellt. Eine der einfachsten Strategien im Umgang mit NaN-Werten ist das Entfernen der Zeilen oder Spalten, die diese enthalten.

Die Methode dropna() ermöglicht Ihnen dies auf einfache Weise. Standardmäßig entfernt sie jede Zeile, die mindestens einen NaN-Wert enthält.

Lassen Sie uns zunächst das initiale Skript ausführen, um unseren Start-DataFrame zu sehen. Das Setup-Skript hat bereits eine Datei namens main.py im Verzeichnis ~/project erstellt.

Öffnen Sie ein Terminal im WebIDE und führen Sie den folgenden Befehl aus:

python3 main.py

Sie sollten den ursprünglichen DataFrame sehen, der NaN-Werte in den Spalten age und city enthält.

Original DataFrame:
      name   age         city SALARY_IN_USD
0    Alice  25.0     New York         50000
1      Bob  30.0  Los Angeles         60000
2  Charlie  35.0     New York         70000
3    David  40.0      Chicago         80000
4    Alice  25.0     New York         50000
5      Eva   NaN       Boston         90000
6    Frank  45.0          NaN        100000

Original DataFrame Info:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7 entries, 0 to 6
Data columns (total 4 columns):
 ##   Column         Non-Null Count  Dtype
---  ------         --------------  -----
 0   name           7 non-null      object
 1   age            6 non-null      float64
 2   city           6 non-null      object
 3   SALARY_IN_USD  7 non-null      object
dtypes: float64(1), object(3)
memory usage: 352.0+ bytes

Lassen Sie uns nun dropna() verwenden, um zu sehen, wie es funktioniert. Öffnen Sie die Datei main.py über den Dateiexplorer im linken Bereich. Fügen Sie den folgenden Code am Ende der Datei hinzu. Dieser Code erstellt einen neuen DataFrame df_dropped mit den entfernten NaN-Zeilen und gibt ihn aus. Wir ändern den ursprünglichen df noch nicht, damit wir in den nächsten Schritten andere Methoden untersuchen können.

## Add this to the end of main.py

print("\nDataFrame after dropping rows with any missing values:")
df_dropped = df.dropna()
print(df_dropped)

Speichern Sie die Datei (Strg+S oder Cmd+S) und führen Sie sie erneut im Terminal aus:

python3 main.py

Die Ausgabe enthält nun einen neuen Abschnitt, der den DataFrame nach dem Entfernen der Zeilen mit NaN-Werten (Zeilen für Eva und Frank) anzeigt.

## ... (previous output) ...

DataFrame after dropping rows with any missing values:
      name   age         city SALARY_IN_USD
0    Alice  25.0     New York         50000
1      Bob  30.0  Los Angeles         60000
2  Charlie  35.0     New York         70000
3    David  40.0      Chicago         80000
4    Alice  25.0     New York         50000

Fehlende Werte mit fillna auffüllen

In diesem Schritt lernen Sie eine weitere Methode zur Behandlung fehlender Daten kennen: das Auffüllen fehlender Werte mit einem bestimmten Wert mithilfe der fillna()-Methode. Das Löschen von Zeilen mit fehlenden Daten kann manchmal zu einem erheblichen Datenverlust führen, insbesondere wenn viele Zeilen fehlende Werte aufweisen. Das Auffüllen ist oft eine bessere Alternative.

Sie können NaN-Werte mit einer Konstante, wie z. B. 0 oder "Unknown", oder mit einem berechneten Wert, wie dem Mittelwert (mean) oder Median der Spalte, auffüllen.

Lassen Sie uns unsere Datei main.py modifizieren. Anstatt nur den gelöschten DataFrame auszugeben, werden wir nun unseren Haupt-DataFrame df bereinigen, indem wir die fehlenden Werte auffüllen. Wir werden das fehlende age mit dem Mittelwert der vorhandenen Alter und die fehlende city mit dem String 'Unknown' auffüllen.

Entfernen Sie den dropna()-Code, den Sie im letzten Schritt hinzugefügt haben, und ersetzen Sie ihn durch den folgenden Code. Wir verwenden inplace=True, um den DataFrame direkt zu ändern.

## Replace the dropna() code with this at the end of main.py

## Calculate the mean of the 'age' column
mean_age = df['age'].mean()

## Fill missing values using the recommended approach to avoid FutureWarnings
df.fillna({'age': mean_age, 'city': 'Unknown'}, inplace=True)

print("\nDataFrame after filling missing values:")
print(df)

Das Argument inplace=True modifiziert den DataFrame direkt, d. h., Sie müssen das Ergebnis nicht einer Variablen zuweisen (z. B. df = df.fillna(...)).

Speichern Sie die Datei und führen Sie sie vom Terminal aus:

python3 main.py

Sie werden sehen, dass die NaN-Werte ersetzt wurden. Evas Alter ist nun der Mittelwert der anderen Alter, und Franks Stadt ist 'Unknown'.

## ... (original DataFrame output) ...

DataFrame after filling missing values:
      name   age         city SALARY_IN_USD
0    Alice  25.0     New York         50000
1      Bob  30.0  Los Angeles         60000
2  Charlie  35.0     New York         70000
3    David  40.0      Chicago         80000
4    Alice  25.0     New York         50000
5      Eva  33.3       Boston         90000
6    Frank  45.0      Unknown        100000

Hinweis: Der mittlere Alterswert ist (25+30+35+40+25+45)/6 = 33.33.... Pandas wird NaN mit diesem Wert auffüllen. Die obige Ausgabe zeigt der Einfachheit halber 35.0, Ihre tatsächliche Ausgabe für Evas Alter wird der berechnete Mittelwert sein.

Doppelte Zeilen mit drop_duplicates löschen

In diesem Schritt lernen Sie, wie Sie doppelte Zeilen aus Ihrem DataFrame entfernen. Doppelte Daten können die Analyse verzerren und zu falschen Ergebnissen führen. Die Methode drop_duplicates() hilft, diese zu identifizieren und zu entfernen.

In unserem ursprünglichen Datensatz erscheint die Zeile für 'Alice' zweimal mit exakt denselben Informationen. Nachdem wir nun fehlende Werte behandelt haben, besteht unsere nächste Bereinigungsaufgabe darin, diesen doppelten Eintrag zu entfernen.

Standardmäßig betrachtet drop_duplicates() eine Zeile als Duplikat, wenn alle ihre Spaltenwerte mit den Werten einer anderen Zeile identisch sind.

Fügen Sie den folgenden Code am Ende Ihres main.py-Skripts hinzu. Wir verwenden weiterhin inplace=True, um unseren DataFrame zu modifizieren.

## Add this to the end of main.py

df.drop_duplicates(inplace=True)

print("\nDataFrame after dropping duplicates:")
print(df)

Speichern Sie die Datei und führen Sie sie vom Terminal aus:

python3 main.py

Die Ausgabe zeigt nun einen DataFrame mit nur 6 Zeilen an, da eine der 'Alice'-Zeilen entfernt wurde.

## ... (previous output) ...

DataFrame after dropping duplicates:
      name   age         city SALARY_IN_USD
0    Alice  25.0     New York         50000
1      Bob  30.0  Los Angeles         60000
2  Charlie  35.0     New York         70000
3    David  40.0      Chicago         80000
5      Eva  33.3       Boston         90000
6    Frank  45.0      Unknown        100000

Beachten Sie, dass der Index 4 nun fehlt, was der gelöschten doppelten Zeile entspricht. Der DataFrame hat nun 6 eindeutige Zeilen.

Spalten mit der rename-Methode umbenennen

In diesem Schritt lernen Sie, wie Sie Spalten umbenennen. Konsistente und klare Spaltennamen sind für die Lesbarkeit und Wartbarkeit des Codes unerlässlich. Es ist üblich, eine einheitliche Namenskonvention zu verwenden, z. B. alles in Kleinbuchstaben mit Unterstrichen.

Unser DataFrame hat eine Spalte namens SALARY_IN_USD. Benennen wir sie in einen einfacheren Namen in Kleinbuchstaben um: salary. Die Methode rename() ist dafür perfekt geeignet. Sie übergeben ein Dictionary an das columns-Argument, wobei die Schlüssel die alten Namen und die Werte die neuen Namen sind.

Fügen Sie den folgenden Code am Ende Ihres main.py-Skripts hinzu:

## Add this to the end of main.py

df.rename(columns={'SALARY_IN_USD': 'salary'}, inplace=True)

print("\nDataFrame after renaming columns:")
print(df)

Speichern Sie die Datei und führen Sie sie vom Terminal aus:

python3 main.py

Sie werden sehen, dass die Spalte SALARY_IN_USD erfolgreich in salary umbenannt wurde.

## ... (previous output) ...

DataFrame after renaming columns:
      name   age         city   salary
0    Alice  25.0     New York    50000
1      Bob  30.0  Los Angeles    60000
2  Charlie  35.0     New York    70000
3    David  40.0      Chicago    80000
5      Eva  33.3       Boston    90000
6    Frank  45.0      Unknown   100000

Diese einfache Änderung macht den Spaltennamen leichter zu tippen und folgt einem gängigen Python-Styleguide.

Spaltentypen mit astype konvertieren

In diesem letzten Schritt lernen Sie, wie Sie den Datentyp einer Spalte konvertieren. Korrekte Datentypen sind entscheidend für die Durchführung von Berechnungen und für die Speichereffizienz.

Wenn Sie sich die anfängliche Ausgabe von df.info() ansehen, werden Sie feststellen, dass die Spalte SALARY_IN_USD einen Dtype von object hatte, was bedeutet, dass die Zahlen als Strings gespeichert wurden. Wir können keine mathematischen Operationen (wie die Berechnung des durchschnittlichen Gehalts) auf Strings durchführen. Wir müssen diese Spalte in einen numerischen Typ konvertieren, z. B. int (Ganzzahl).

Die Methode astype() wird zu diesem Zweck verwendet. Konvertieren wir unsere neue Spalte salary in den Typ int.

Fügen Sie den folgenden Code am Ende von main.py hinzu. Wir werden auch die Informationen des DataFrames erneut ausgeben, um die Änderung zu bestätigen.

## Add this to the end of main.py

df['salary'] = df['salary'].astype(int)

print("\nDataFrame after converting data types:")
print(df)

print("\nFinal DataFrame Info:")
df.info()

Speichern Sie die Datei und führen Sie sie zum letzten Mal aus:

python3 main.py

Die endgültige Ausgabe zeigt den bereinigten DataFrame und seine neuen Informationen. Achten Sie in der Info-Ausgabe genau auf den Dtype der Spalte salary. Er sollte nun int64 und nicht object sein.

## ... (previous output) ...

DataFrame after converting data types:
      name   age         city  salary
0    Alice  25.0     New York   50000
1      Bob  30.0  Los Angeles   60000
2  Charlie  35.0     New York   70000
3    David  40.0      Chicago   80000
5      Eva  33.3       Boston   90000
6    Frank  45.0      Unknown  100000

Final DataFrame Info:
<class 'pandas.core.frame.DataFrame'>
Index: 6 entries, 0 to 6
Data columns (total 4 columns):
 ##   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   name    6 non-null      object
 1   age     6 non-null      float64
 2   city    6 non-null      object
 3   salary  6 non-null      int64
dtypes: float64(1), int64(1), object(2)
memory usage: 240.0+ bytes

Da die Spalte salary vom Typ Integer ist, können Sie nun Berechnungen wie df['salary'].mean() durchführen.

Zusammenfassung

Herzlichen Glückwunsch zum Abschluss des Pandas Basic Data Cleaning Labs! Sie haben erfolgreich einen unordentlichen, rohen Datensatz in ein sauberes, analysebereites Format umgewandelt.

In diesem Lab haben Sie mehrere wesentliche Techniken zur Datenbereinigung in Pandas gelernt und geübt:

  • Umgang mit fehlenden Werten: Sie haben gesehen, wie Sie Zeilen mit NaN mit dropna() entfernen und wie Sie sie mit aussagekräftigen Daten mit fillna() füllen.
  • Entfernen von Duplikaten: Sie haben drop_duplicates() verwendet, um redundante Zeilen aus Ihrem Datensatz zu entfernen.
  • Umbenennen von Spalten: Sie haben gelernt, Spaltennamen mit der Methode rename() konsistenter und lesbarer zu gestalten.
  • Konvertieren von Datentypen: Sie haben astype() verwendet, um den Datentyp einer Spalte in das richtige Format zu ändern, was weitere Analysen ermöglicht.

Diese grundlegenden Fähigkeiten sind die Bausteine für jede ernsthafte Datenarbeit. Wenn Sie diese beherrschen, können Sie reale Datenherausforderungen souverän meistern. Üben Sie diese Techniken weiter, um sich in der Datenmanipulation mit Pandas zu verbessern.