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

import pandas as pd

# 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

import pandas as pd

# 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

import pandas as pd

# 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

import pandas as pd

# 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

import pandas as pd

# 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

import pandas as pd

# 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

import pandas as pd

# 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

import pandas as pd

# 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

import pandas as pd

# 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

import pandas as pd

# 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

import pandas as pd

# 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

import pandas as pd

# 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

import pandas as pd

# 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 pandas as pd
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

import pandas as pd

# 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

import pandas as pd

# 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

import pandas as pd

# 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

import pandas as pd

# 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

# Verwende xs, um alle Daten abzurufen, bei denen 'Number' 1 ist
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

# Wähle alle Daten aus, bei denen Letter 'A' ist
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

# Nach MultiIndex sortieren
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

# groupby zum Aggregieren auf MultiIndex verwenden
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

# Index zurücksetzen
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

# Fehlende Werte in Beispieldaten einführen
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