Pandas Erweiterte Funktionen
Pandas bietet extrem leistungsstarke Datenmanipulationsfunktionen, die für komplexe Aufgaben wie Datenbereinigung, Analyse, Aggregation und Zeitreihenverarbeitung geeignet sind. Die Beherrschung der erweiterten Funktionen von Pandas kann die Effizienz der Datenverarbeitung und -analyse erheblich verbessern.
1. Daten zusammenführen und verknüpfen
Pandas bietet mehrere Methoden zum Zusammenführen und Verketten verschiedener DataFrames, wie z. B.merge()、concat()undjoin(). Diese Methoden werden häufig verwendet, um mehrere Datensätze und komplexe Zusammenführungsaufgaben zu verarbeiten.
1. merge()— Verknüpfen im Datenbankstil
merge()Methode ermöglicht das Zusammenführen zweier DataFrames basierend auf bestimmten Spalten, ähnlich wie bei SQLJOINOperation. Sie unterstützt Inner Joins, Outer Joins, Left Joins und Right Joins.
| Parameters | Beschreibung |
|---|---|
left |
Linker DataFrame |
right |
Rechter DataFrame |
how |
Merge-Methode, unterstützt'inner', 'outer', 'left', 'right' |
on |
Spaltenname(n) zum Verknüpfen (falls die Spaltennamen auf beiden Seiten unterschiedlich sind, können Sieleft_onundright_on) |
left_on |
Spalte(n) im linken DataFrame zum Verknüpfen |
right_on |
Spalte(n) im rechten DataFrame zum Verknüpfen |
suffixes |
Suffixe hinzufügen, um doppelte Spaltennamen zu unterscheiden |
Beispiel
# Beispieldaten
left = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['Alice', 'Bob', 'Charlie']})
right = pd.DataFrame({'ID': [1, 2, 4], 'Age': [24, 27, 22]})
# Verwende merge für Inner Join
result = pd.merge(left, right, on='ID', how='inner')
print(result)
Ausgabe:
ID Name Age 0 1 Alice 24 1 2 Bob 27
2. concat()— Verketten entlang einer Achse
concat()Es wird verwendet, um mehrere DataFrames entlang einer angegebenen Achse (Zeilen oder Spalten) zu verketten, häufig verwendet für zeilenweises Zusammenführen (vertikale Verkettung) oder spaltenweises Zusammenführen (horizontale Verkettung).
| Parameters | Beschreibung |
|---|---|
objs |
Liste der zu verkettenden DataFrames |
axis |
Achse der Verkettung,0gibt das Zusammenführen nach Zeilen an,1gibt das Zusammenführen nach Spalten an |
ignore_index |
Ob der Index ignoriert und der Index neu erzeugt werden soll (Standard istFalse) |
keys |
Stellt einen hierarchischen Index für die verketteten Objekte bereit |
Beispiel
# Beispieldaten
df1 = pd.DataFrame({'A': [1, 2, 3]})
df2 = pd.DataFrame({'A': [4, 5, 6]})
# Zeilenweise Verkettung
result = pd.concat([df1, df2], axis=0, ignore_index=True)
print(result)
Ausgabe:
A 0 1 1 2 2 3 3 4 4 5 5 6
3. join()— Indexbasiertes Verbinden
join()Die Methode ist eine vereinfachte Join-Operation in Pandas, die häufig verwendet wird, um mehrere DataFrames anhand des Index zu verbinden.
| Parameters | Beschreibung |
|---|---|
other |
Ein weiteres DataFrame zum Verbinden |
how |
Merge-Methode, unterstützt'left', 'right', 'outer', 'inner' |
on |
Zu verwendende Join-Spalte; standardmäßig wird der Index verwendet |
Beispiel
# Beispieldaten
left = pd.DataFrame({'A': [1, 2, 3]}, index=[1, 2, 3])
right = pd.DataFrame({'B': [4, 5, 6]}, index=[1, 2, 4])
# Verwende join zum Verbinden
result = left.join(right, how='inner')
print(result)
Ausgabe:
A B 1 1 4 2 2 5
2. Pivot-Tabellen und Kreuztabellen
Pandas bietetpivot_table()Methode zum Erstellen von Pivot-Tabellen, undcrosstab()Methode zum Berechnen von Kreuztabellen. Sowohl Pivot-Tabellen als auch Kreuztabellen eignen sich gut für Datenzusammenfassung und -neuordnung.
1. pivot_table()— Pivot-Tabellen erstellen
| Parameters | Beschreibung |
|---|---|
data |
Eingabedaten |
values |
Spalte, die zusammengefasst werden soll |
index |
Spalte, die als Zeilenindex verwendet werden soll |
columns |
Spalte, die als Spaltenindex verwendet werden soll |
aggfunc |
Aggregationsfunktion, Standard istmean, kann seinsum, countwarten |
fill_value |
Fehlende Werte auffüllen |
Beispiel
# Beispieldaten
data = {'Date': ['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04'],
'Category': ['A', 'B', 'A', 'B'],
'Sales': [100, 150, 200, 250]}
df = pd.DataFrame(data)
# Pivot-Tabelle erstellen
pivot_table = pd.pivot_table(df, values='Sales', index='Date', columns='Category', aggfunc='sum', fill_value=0)
print(pivot_table)
Ausgabe:
Category A B Date 2024-01-01 100 0 2024-01-02 0 150 2024-01-03 200 0 2024-01-04 0 250
2. crosstab()— Kreuztabellen erstellen
| Parameters | Beschreibung |
|---|---|
index |
Zeilenbeschriftungen |
columns |
Spaltenbeschriftungen |
values |
Zur Berechnung verwendete Daten (optional) |
aggfunc |
Aggregationsfunktion, Standardcount |
Beispiel
# Beispieldaten
data = {'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
'Region': ['North', 'South', 'North', 'South', 'West', 'East']}
df = pd.DataFrame(data)
# Kreuztabelle erstellen
cross_table = pd.crosstab(df['Category'], df['Region'])
print(cross_table)
Ausgabe:
Region East North South West Category A 0 2 0 1 B 1 0 1 0
3. Anwenden benutzerdefinierter Funktionen
Pandas bietet mehrere Möglichkeiten, benutzerdefinierte Funktionen für die Datenbereinigung und -transformation anzuwenden.
1. apply()— Anwenden von Funktionen auf DataFrame oder Series
apply()Methode ermöglicht das Anwenden benutzerdefinierter Funktionen auf DataFrame oder Series und unterstützt Operationen auf Zeilen oder Spalten.
| Parameters | Beschreibung |
|---|---|
func |
Funktion, die angewendet werden soll |
axis |
Standard ist0, gibt die Anwendung spaltenweise an;1gibt die Anwendung zeilenweise an |
raw |
Ob die Originaldaten übergeben werden sollen (Standard istFalse) |
result_type |
Legt den Typ der Ausgabe fest, wie z. B.expand, reduce, broadcast |
Beispiel
# Beispieldaten
df = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [10, 20, 30, 40]})
# Eine benutzerdefinierte Funktion definieren
def custom_func(x):
return x * 2
# Die Funktion auf Spalten anwenden
df['A'] = df['A'].apply(custom_func)
print(df)
Ausgabe:
A B 0 2 10 1 4 20 2 6 30 3 8 40
2. applymap()— Anwenden einer Funktion auf das gesamte DataFrame
applymap()Es kann nur auf einen DataFrame angewendet werden und wirkt auf jedes Element im DataFrame.
| Parameters | Beschreibung |
|---|---|
func |
Funktion, die angewendet werden soll |
Beispiel
# Beispieldaten
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
# Eine benutzerdefinierte Funktion auf das DataFrame anwenden
df = df.applymap(lambda x: x ** 2)
print(df)
Ausgabe:
A B 0 1 16 1 4 25 2 9 36
3. map()— Anwenden einer Funktion auf eine Series
map()Sie können eine Funktion oder ein Mapping auf jedes Element in einer Series anwenden.
| Parameters | Beschreibung |
|---|---|
arg |
Funktion, Dictionary oder Series zum Anwenden |
Beispiel
# Beispieldaten
df = pd.DataFrame({'A': ['cat', 'dog', 'rabbit']})
# Ein Dictionary für das Mapping verwenden
df['A'] = df['A'].map({'cat': 'kitten', 'dog': 'puppy'})
print(df)
Ausgabe:
A
0 kitten
1 puppy
2 NaN
4. Gruppierungsoperationen und Aggregation
In Pandas ist diegroupby()Methode sehr leistungsstark und kann für gruppierte Aggregation, Datentransformation und Datenfilterung verwendet werden. Durchgroupby(), können Sie Daten nach bestimmten Bedingungen gruppieren und Aggregationsoperationen wie Summe, Mittelwert, Anzahl usw. durchführen.
1. groupby()— Datengruppierung
| Parameters | Beschreibung |
|---|---|
by |
Nach welcher Spalte oder welchem Index gruppieren |
axis |
Achse der Gruppierung, Standard ist0, das heißt, Gruppierung nach Zeilen |
level |
Nach der Ebene des Index gruppieren (anwendbar auf MultiIndex) |
Beispiel
# Beispieldaten
df = pd.DataFrame({
'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
'Wert': [10, 20, 30, 40, 50, 60]
})
# Nach der Spalte Category gruppieren und die Summe für jede Gruppe berechnen
grouped = df.groupby('Category')['Value'].sum()
print(grouped)
Ausgabe:
Category A 90 B 120 Name: Value, dtype: int64
2. Aggregationsoperationen (agg())
agg()Wird verwendet, um komplexe Aggregationsoperationen durchzuführen; es können mehrere Funktionen übergeben werden, um gleichzeitig mehrere Aggregatwerte zu berechnen.
| Parameters | Beschreibung |
|---|---|
func |
Aggregationsfunktion, kann eine Zeichenkette oder eine benutzerdefinierte Funktion sein |
Beispiel
# Beispieldaten
df = pd.DataFrame({
'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
'Wert': [10, 20, 30, 40, 50, 60]
})
# Verwende agg(), um mehrere Aggregationsoperationen durchzuführen
grouped = df.groupby('Category')['Value'].agg([sum, min, max])
print(grouped)
Ausgabe:
sum min max Category A 90 10 50 B 120 20 60
5. Zeitreihenverarbeitung
Pandas bietet leistungsstarke Funktionen zur Zeitreihenverarbeitung, einschließlich Datumsparsing, Frequenzkonvertierung, Generierung von Datumsbereichen, Zeitfensteroperationen usw.
1. date_range()— Generierung von Zeitreihen
| Parameter | Beschreibung |
|---|---|
start |
Startdatum |
end |
Enddatum |
periods |
Anzahl der generierten Zeitpunkte |
freq |
Frequenz (z. B.,Dbedeutet Tage,Hbedeutet Stunden usw.) |
Beispiel
# Zeitreihe generieren
date_range = pd.date_range(start='2024-01-01', periods=5, freq='D')
print(date_range)
Ausgabe:
DatetimeIndex(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05'], dtype='datetime64[ns]', freq='D')
2. Datums- und Zeitversätze
Verwendungpd.Timedelta()können Sie Operationen zur Addition und Subtraktion von Zeit durchführen.
Beispiel
# Datumsversatz
date = pd.to_datetime('2024-01-01')
new_date = date + pd.Timedelta(days=10)
print(new_date)
Ausgabe:
2024-01-11 00:00:00
3. Zeitfensteroperationen (Rolling, Expanding)
Verwendungrolling()undexpanding()Methoden zur Durchführung von Rolling- und Expanding-Window-Operationen, die häufig bei Berechnungen wie gleitenden Durchschnitten in Zeitreihen verwendet werden.
| Methode | Beschreibung |
|---|---|
rolling() |
Rolling-Window-Operationen berechnen, häufig verwendet für gleitende Durchschnitte usw. |
expanding() |
Expanding-Window-Operationen berechnen, kumulative Werte |
Beispiel
# Beispieldaten
df = pd.DataFrame({'Value': [10, 20, 30, 40, 50]})
# Berechne 3-Tage-Rolling-Durchschnitt
df['Rolling_Mean'] = df['Value'].rolling(window=3).mean()
print(df)
Ausgabe:
Value Rolling_Mean 0 10 NaN 1 20 NaN 2 30 20.000000 3 40 30.000000 4 50 40.000000
6. Umgang mit fehlenden Werten
Pandas bietet mehrere Methoden zum Umgang mit fehlenden Werten (wie NaN). Zu den gängigen Operationen gehören das Füllen fehlender Werte, das Löschen fehlender Werte usw.
| Methode | Beschreibung |
|---|---|
isna() |
Auf fehlende Werte prüfen, boolesche Werte zurückgeben |
fillna() |
Fehlende Werte auffüllen |
dropna() |
Zeilen oder Spalten mit fehlenden Werten löschen |
Beispiel
import numpy as np
# Beispieldaten
df = pd.DataFrame({
'A': [1, 2, np.nan, 4],
'B': [5, np.nan, 7, 8]
})
# Fehlende Werte füllen
df_filled = df.fillna(0)
print(df_filled)
Ausgabe:
A B 0 1 5 1 2 0 2 0 7 3 4 8
7. MultiIndex
Pandas bietet die MultiIndex-Funktion, die es ermöglicht, komplexe Datenstrukturen in DataFrame oder Series zu handhaben, besonders geeignet für hierarchische Daten. Mit MultiIndex können wir Operationen wie Gruppieren, Auswählen, Slicing und Aggregieren von Daten durchführen.
1. Erstellen eines MultiIndex
Kann erstellt werden mitpd.MultiIndex.from_tuples()、pd.MultiIndex.from_product()oderset_index()Methoden zum Erstellen eines MultiIndex.
Methode 1:pd.MultiIndex.from_tuples()
Verwenden Sie Tupel, um einen MultiIndex zu erstellen, wobei jedes Tupel einer Indexebene entspricht.
| Parameter | Beschreibung |
|---|---|
tuples |
Jedes Tupel entspricht einem Indexwert |
names |
Name jeder Indexebene (optional) |
Beispiel
# Tupel erstellen
index_tuples = [('A', 1), ('A', 2), ('B', 1), ('B', 2)]
# MultiIndex erstellen
multi_index = pd.MultiIndex.from_tuples(index_tuples, names=['Letter', 'Number'])
# DataFrame erstellen
df = pd.DataFrame({'Value': [10, 20, 30, 40]}, index=multi_index)
print(df)
Ausgabe:
Value
Letter Number
A 1 10
2 20
B 1 30
2 40
Methode 2: pd.MultiIndex.from_product()
Verwenden Sie das kartesische Produkt mehrerer Listen, um einen MultiIndex zu erstellen, geeignet für Fälle mit vielen Daten-Dimensionen.
| Parameter | Beschreibung |
|---|---|
iterables |
Mehrere Listen oder Arrays |
names |
Name jeder Indexebene (optional) |
Beispiel
# Mehrere Listen erstellen
index_values = [['A', 'B'], [1, 2]]
# MultiIndex erstellen
multi_index = pd.MultiIndex.from_product(index_values, names=['Letter', 'Number'])
# DataFrame erstellen
df = pd.DataFrame({'Value': [10, 20, 30, 40]}, index=multi_index)
print(df)
Ausgabe:
Value
Letter Number
A 1 10
2 20
B 1 30
2 40
Methode 3: Verwenden vonset_index()Erstellen eines MultiIndex
set_index()Die Methode kann die Spalten eines DataFrame in einen MultiIndex umwandeln und eignet sich zum Erstellen eines MultiIndex aus vorhandenen Daten.
| Parameter | Beschreibung |
|---|---|
keys |
Spaltennamen, die als Index verwendet werden (kann eine einzelne Spalte oder mehrere Spalten sein) |
Beispiel
# Beispieldaten
data = {
'Letter': ['A', 'A', 'B', 'B'],
'Number': [1, 2, 1, 2],
'Wert': [10, 20, 30, 40]
}
df = pd.DataFrame(data)
# MultiIndex setzen
df.set_index(['Letter', 'Number'], inplace=True)
print(df)
Ausgabe:
Value
Letter Number
A 1 10
2 20
B 1 30
2 40
2. Operationen mit MultiIndex
1. Zugriff auf MultiIndex-Daten
Auf Daten kann über hierarchische Indizierung zugegriffen werden. Mithilfe vonloc[]oderxs()(Querschnitt) wird die Datenauswahl bequem.
Verwendungloc[]um Daten auszuwählen:
Beispiel
# Beispieldaten
data = {
'Letter': ['A', 'A', 'B', 'B'],
'Number': [1, 2, 1, 2],
'Wert': [10, 20, 30, 40]
}
df = pd.DataFrame(data)
# MultiIndex setzen
df.set_index(['Letter', 'Number'], inplace=True)
# Kategorie 'A' auswählen, alle Daten, bei denen 'Number' 1 ist
print(df.loc['A', 1])
Ausgabe:
Value 10 Name: (A, 1), dtype: int64
Verwendungxs()um Querschnittsdaten zu erhalten:
xs()Die Methode kann Slices auf angegebenen Ebenen in einem MultiIndex auswählen.
Beispiel
print(df.xs(1, level='Number'))
Ausgabe:
Value
Letter
A 10
B 30
2. Slicing eines MultiIndex
Pandas unterstützt Slicing-Operationen auf einem MultiIndex, sodass verschiedene Teilmengen nach Indexebene ausgewählt werden können.
Beispiel
print(df.loc['A'])
Ausgabe:
Value Number 1 10 2 20
3. Sortieren eines MultiIndex
Pandas'sort_index()Methode unterstützt das Sortieren eines MultiIndex.
Beispiel
df_sorted = df.sort_index(level=['Letter', 'Number'], ascending=[True, False])
print(df_sorted)
Ausgabe:
Value
Letter Number
A 2 20
1 10
B 2 40
1 30
4. Aggregationsoperationen
MultiIndex kombiniert mitgroupby()können leistungsstarke Aggregationsoperationen durchführen, die für die statistische Analyse komplexer Daten geeignet sind.
Beispiel
df_grouped = df.groupby(['Letter', 'Number']).sum()
print(df_grouped)
Ausgabe:
Value
Letter Number
A 1 10
2 20
B 1 30
2 40
5. Zurücksetzen des Index
Sie können diereset_index()Methode zum Zurücksetzen des MultiIndex in reguläre Spalten.
Beispiel
df_reset = df.reset_index()
print(df_reset)
Ausgabe:
Letter Number Value 0 A 1 10 1 A 2 20 2 B 1 30 3 B 2 40
6. Fehlende Werte in MultiIndex
Fehlende Werte in einem MultiIndex können behandelt werdenfillna()oderdropna()ähnlich wie bei einem regulären Index.
Beispiel
data = {
'Letter': ['A', 'A', 'B', 'B'],
'Number': [1, 2, 1, 2],
'Value': [10, None, 30, 40]
}
df = pd.DataFrame(data)
df.set_index(['Letter', 'Number'], inplace=True)
# Fehlende Werte füllen
df_filled = df.fillna(0)
print(df_filled)
Ausgabe:
Value
Letter Number
A 1 10
2 0
B 1 30
2 40
Andere Erweiterungen