Bild vom Autor
Pandas ist die am häufigsten verwendete Python-Bibliothek für die Datenanalyse und -bearbeitung. Die Daten, die Sie aus der Quelle lesen, erfordern jedoch häufig eine Reihe von Datenbereinigungsschritten – bevor Sie sie analysieren können, um Erkenntnisse zu gewinnen, Geschäftsfragen zu beantworten oder Modelle für maschinelles Lernen zu erstellen.
Dieser Leitfaden unterteilt den Prozess der Datenbereinigung mit Pandas in 7 praktische Schritte. Wir erstellen einen Beispieldatensatz und arbeiten die Schritte zur Datenbereinigung durch.
Lass uns anfangen!
Hochfahren eines Beispiel-DataFrames
Hyperlink zum Colab Pocket book
Bevor wir mit den eigentlichen Datenbereinigungsschritten beginnen, erstellen wir einen Pandas-Datenrahmen mit Mitarbeiterdatensätzen. Wir verwenden Faker zur Generierung synthetischer Daten. Installieren Sie es additionally zuerst:
Wenn Sie möchten, können Sie dasselbe Beispiel nachmachen. Sie können auch einen Datensatz Ihrer Wahl verwenden. Hier ist der Code zum Generieren von 1000 Datensätzen:
import pandas as pd
from faker import Faker
import random
# Initialize Faker to generate artificial knowledge
pretend = Faker()
# Set seed for reproducibility
Faker.seed(42)
# Generate artificial knowledge
knowledge = ()
for _ in vary(1000):
knowledge.append({
'Title': pretend.identify(),
'Age': random.randint(18, 70),
'E mail': pretend.e mail(),
'Telephone': pretend.phone_number(),
'Deal with': pretend.handle(),
'Wage': random.randint(20000, 150000),
'Join_Date': pretend.date_this_decade(),
'Employment_Status': random.selection(('Full-Time', 'Half-Time', 'Contract')),
'Division': random.selection(('IT', 'Engineering','Finance', 'HR', 'Advertising'))
})
Lassen Sie uns diesen Datenrahmen ein wenig optimieren, um fehlende Werte, doppelte Datensätze, Ausreißer und mehr einzuführen:
# Let's tweak the information a bit!
# Introduce lacking values
for i in random.pattern(vary(len(knowledge)), 50):
knowledge(i)('E mail') = None
# Introduce duplicate information
knowledge.prolong(random.pattern(knowledge, 100))
# Introduce outliers
for i in random.pattern(vary(len(knowledge)), 20):
knowledge(i)('Wage') = random.randint(200000, 500000)
Erstellen wir nun einen Datenrahmen mit diesen Datensätzen:
# Create dataframe
df = pd.DataFrame(knowledge)
Beachten Sie, dass wir den Seed für Faker und nicht für das Zufallsmodul festlegen. Die von Ihnen generierten Datensätze sind daher teilweise zufällig.
Schritt 1: Die Daten verstehen
Schritt 0 besteht immer darin, die geschäftliche Frage/das geschäftliche Drawback zu verstehen, das Sie lösen möchten. Sobald Sie das wissen, können Sie mit den Daten arbeiten, die Sie in Ihren Pandas-Datenrahmen eingelesen haben.
Bevor Sie jedoch irgendetwas Sinnvolles mit dem Datensatz machen können, ist es wichtig, sich zunächst einen allgemeinen Überblick über den Datensatz zu verschaffen. Dazu gehört, einige grundlegende Informationen zu den verschiedenen Feldern und der Gesamtzahl der Datensätze zu erhalten, den Kopf des Datenrahmens zu überprüfen und dergleichen.
Hier führen wir die data()
Methode im Datenrahmen:
Output >>>
RangeIndex: 1100 entries, 0 to 1099
Knowledge columns (whole 9 columns):
# Column Non-Null Rely Dtype
--- ------ -------------- -----
0 Title 1100 non-null object
1 Age 1100 non-null int64
2 E mail 1047 non-null object
3 Telephone 1100 non-null object
4 Deal with 1100 non-null object
5 Wage 1100 non-null int64
6 Join_Date 1100 non-null object
7 Employment_Status 1100 non-null object
8 Division 1100 non-null object
dtypes: int64(2), object(7)
reminiscence utilization: 77.5+ KB
Und untersuchen Sie den Kopf des Datenrahmens:
Ausgabe von df.head()
Schritt 2: Umgang mit Duplikaten
Doppelte Datensätze sind ein häufiges Drawback, das die Analyseergebnisse verfälscht. Daher sollten wir alle doppelten Datensätze identifizieren und entfernen, damit wir nur mit den eindeutigen Datensätzen arbeiten.
So finden wir alle Duplikate im Datenrahmen und löschen dann alle Duplikate an Ort und Stelle:
# Test for duplicate rows
duplicates = df.duplicated().sum()
print("Variety of duplicate rows:", duplicates)
# Eradicating duplicate rows
df.drop_duplicates(inplace=True)
Output >>>
Variety of duplicate rows: 100
Schritt 3: Umgang mit fehlenden Daten
Fehlende Daten sind ein häufiges Datenqualitätsproblem in vielen Knowledge Science-Projekten. Wenn Sie einen kurzen Blick auf das Ergebnis der data()
Methode aus dem vorherigen Schritt sollten Sie sehen, dass die Anzahl der nicht-null-Objekte nicht für alle Felder identisch ist und dass in der E-Mail-Spalte Werte fehlen. Wir erhalten trotzdem die genaue Anzahl.
Um die Anzahl der fehlenden Werte in jeder Spalte zu ermitteln, können Sie Folgendes ausführen:
# Test for lacking values
missing_values = df.isna().sum()
print("Lacking Values:")
print(missing_values)
Output >>>
Lacking Values:
Title 0
Age 0
E mail 50
Telephone 0
Deal with 0
Wage 0
Join_Date 0
Employment_Status 0
Division 0
dtype: int64
Wenn in einer oder mehreren numerischen Spalten Werte fehlen, können wir geeignete Imputationstechniken anwenden. Da das Feld „E-Mail“ fehlt, setzen wir die fehlenden E-Mails einfach wie folgt auf eine Platzhalter-E-Mail:
# Dealing with lacking values by filling with a placeholder
df('E mail').fillna('unknown@instance.com', inplace=True)
Schritt 4: Daten transformieren
Wenn Sie am Datensatz arbeiten, kann es sein, dass ein oder mehrere Felder nicht den erwarteten Datentyp haben. In unserem Beispieldatenrahmen muss das Feld „Join_Date“ in ein gültiges Datums-/Uhrzeitobjekt umgewandelt werden:
# Convert 'Join_Date' to datetime
df('Join_Date') = pd.to_datetime(df('Join_Date'))
print("Join_Date after conversion:")
print(df('Join_Date').head())
Output >>>
Join_Date after conversion:
0 2023-07-12
1 2020-12-31
2 2024-05-09
3 2021-01-19
4 2023-10-04
Title: Join_Date, dtype: datetime64(ns)
Da wir über das Eintrittsdatum verfügen, ist es eigentlich hilfreicher, eine Spalte „Beschäftigungsjahre“ zu haben, wie gezeigt:
# Creating a brand new characteristic 'Years_Employed' primarily based on 'Join_Date'
df('Years_Employed') = pd.Timestamp.now().yr - df('Join_Date').dt.yr
print("New characteristic 'Years_Employed':")
print(df(('Join_Date', 'Years_Employed')).head())
Output >>>
New characteristic 'Years_Employed':
Join_Date Years_Employed
0 2023-07-12 1
1 2020-12-31 4
2 2024-05-09 0
3 2021-01-19 3
4 2023-10-04 1
Schritt 5: Textdaten bereinigen
Es kommt häufig vor, dass Zeichenfolgenfelder inkonsistent formatiert sind oder ähnliche Probleme aufweisen. Das Bereinigen von Textual content kann so einfach sein wie das Anwenden einer Groß-/Kleinschreibung oder so schwierig wie das Schreiben eines komplexen regulären Ausdrucks, um die Zeichenfolge in das erforderliche Format zu bringen.
In unserem Beispieldatenrahmen sehen wir, dass die Spalte „Adresse“ viele „n“-Zeichen enthält, die die Lesbarkeit beeinträchtigen. Ersetzen wir sie additionally durch Leerzeichen wie folgt:
# Clear handle strings
df('Deal with') = df('Deal with').str.substitute('n', ' ', regex=False)
print("Deal with after textual content cleansing:")
print(df('Deal with').head())
Output >>>
Deal with after textual content cleansing:
0 79402 Peterson Drives Apt. 511 Davisstad, PA 35172
1 55341 Amanda Gardens Apt. 764 Lake Mark, WI 07832
2 710 Eric Property Carlsonfurt, MS 78605
3 809 Burns Creek Natashaport, IA 08093
4 8713 Caleb Brooks Apt. 930 Lake Crystalbury, CA...
Title: Deal with, dtype: object
Schritt 6: Umgang mit Ausreißern
Wenn Sie wieder nach oben scrollen, sehen Sie, dass wir einige Werte in der Spalte „Gehalt“ extrem hoch angesetzt haben. Solche Ausreißer sollten ebenfalls identifiziert und entsprechend behandelt werden, damit sie die Analyse nicht verfälschen.
Sie werden oft berücksichtigen wollen Was macht einen Datenpunkt zu einem Ausreißer (wenn es sich um eine falsche Dateneingabe handelt oder wenn es sich tatsächlich um gültige Werte und nicht um Ausreißer handelt). Sie können dann entscheiden, wie Sie damit umgehen: Datensätze mit Ausreißern löschen oder die Teilmenge der Zeilen mit Ausreißern abrufen und separat analysieren.
Verwenden wir den Z-Rating und ermitteln wir die Gehaltswerte, die mehr als drei Standardabweichungen vom Mittelwert abweichen:
# Detecting outliers utilizing z-score
z_scores = (df('Wage') - df('Wage').imply()) / df('Wage').std()
outliers = df(abs(z_scores) > 3)
print("Outliers primarily based on Wage:")
print(outliers(('Title', 'Wage')).head())
Output >>>
Outliers primarily based on Wage:
Title Wage
16 Michael Powell 414854
131 Holly Jimenez 258727
240 Daniel Williams 371500
328 Walter Bishop 332554
352 Ashley Munoz 278539
Schritt 7: Daten zusammenführen
In den meisten Projekten können die Daten, die Sie haben, nicht sind die Daten, die Sie für die Analyse verwenden möchten. Sie müssen die relevantesten Felder finden und auch Daten aus anderen Datenrahmen zusammenführen, um nützlichere Daten zu erhalten, die Sie für die Analyse verwenden können.
Erstellen Sie als schnelle Übung einen weiteren zugehörigen Datenrahmen und führen Sie ihn mit dem vorhandenen Datenrahmen in einer gemeinsamen Spalte zusammen, sodass die Zusammenführung sinnvoll ist. Das Zusammenführen in Pandas funktioniert sehr ähnlich wie Joins in SQL, daher schlage ich vor, dass Sie das als Übung ausprobieren!
Einpacken
Das ist alles für dieses Tutorial! Wir haben einen Beispieldatenrahmen mit Datensätzen erstellt und die verschiedenen Schritte zur Datenbereinigung durchgearbeitet. Hier ist eine Übersicht über die Schritte: Verstehen der Daten, Umgang mit Duplikaten, fehlenden Werten, Transformieren von Daten, Bereinigen von Textdaten, Umgang mit Ausreißern und Zusammenführen von Daten.
Wenn Sie alles über Knowledge Wrangling mit Pandas erfahren möchten, schauen Sie sich an 7 Schritte zum Meistern der Datenbereinigung mit Pandas und Python.
Bala Priya C ist Entwicklerin und technische Redakteurin aus Indien. Sie arbeitet gerne an der Schnittstelle zwischen Mathematik, Programmierung, Datenwissenschaft und Inhaltserstellung. Ihre Interessens- und Fachgebiete umfassen DevOps, Datenwissenschaft und natürliche Sprachverarbeitung. Sie liest, schreibt, programmiert und trinkt gerne Kaffee! Derzeit arbeitet sie daran, ihr Wissen zu lernen und mit der Entwickler-Group zu teilen, indem sie Tutorials, Anleitungen, Meinungsbeiträge und mehr verfasst. Bala erstellt auch ansprechende Ressourcenübersichten und Programmier-Tutorials.