Anwendung von Python: Pandas Teil 4: Verketten und Kombinieren von DataFrames

Übersicht über die Datenrahmenverbindung / -kombination

DataFrames können in Pandas verkettet und kombiniert werden.

image.png

image.png

DataFrame-Verkettung

Wenn Index und Spalte übereinstimmen

Das Verbinden von DataFrames in einer bestimmten Richtung wird als Verkettung bezeichnet. Verkettung von DataFrames mit übereinstimmenden Indizes oder Spalten

axis=0 #Wenn Sie dies angeben, wird die Liste von Anfang an vertikal verkettet.

Wenn Achse = 1 angegeben ist, werden sie auch horizontal verbunden.

#Vertikal verbunden
pandas.concat([Liste der DataFrames], axis=0)

#Horizontal verbunden
pandas.concat([Liste der DataFrames], axis=1)
#Bei horizontaler Verkettung wird nicht unterschieden, auch wenn jeder DataFrame dieselbe Spalte hat
#Beachten Sie, dass die Spalten dupliziert werden, wenn sie verkettet werden.

Wenn Sie in vertikaler Richtung verbinden, verbinden Sie in derselben Spalte Wenn Sie horizontal verketten, verketten Sie mit demselben Index.

Wenn Index und Spalte nicht übereinstimmen

Der Punkt ist, dass leere Zeilen und Spalten einmal mit NaN gesetzt werden.

Für mehr Informationen Beim Verketten von DataFrames, deren Indizes und Spalten nicht übereinstimmen Zellen mit NaN in Zeilen und Spalten, die keine gemeinsamen Indizes oder Spalten sind, werden automatisch erstellt.

Auch wenn die Indizes und Spalten nicht übereinstimmen, ist die Verkettungsmethode dieselbe wie bei ihnen.

pandas.concat([Liste der DataFrames], axis=0) 
#Stellen Sie eine vertikale Verbindung von oben in der Liste her
# axis=Wenn 1 angegeben ist, werden sie horizontal verbunden.

Angabe einer Beschriftung beim Verketten

Da die Verkettung die DataFrames verbindet, ohne sie zu unterscheiden Möglicherweise sind doppelte Etiketten vorhanden.

Zum Beispiel sind in der Verkettung von Beispiel 1 unten "Apfel", "Orange", "Banane" Sie können sehen, dass sie als Beschriftungen dupliziert werden.

In diesem Fall fügen Sie pd.concat () die durch Schlüssel angegebene Bezeichnung hinzu. Sie können doppelte Beschriftungen vermeiden.

concat_df=pd.concat([df_data1,df_data2],axis=1,keys=["X", "Y"]) #Mit Schlüsseln einstellen

Der Datenrahmen nach der Verkettung ist ein Multi-Index, der mehrere Beschriftungen verwendet.

Im Fall von Beispiel 2 können Sie sehen, dass die neuen Spalten "X" und "Y" über den vorhandenen Spalten hinzugefügt wurden. In diesem Fall kann sich df ["X"] auf die Spalte mit der Bezeichnung "X" beziehen. Sie können auf die Spalte "Apfel" in der Spalte "X" verweisen, indem Sie df ["X", "Apfel"] schreiben.

image.png

image.png

DataFrame Join

Beschreibt den Join. Das Verbinden wird auch als Zusammenführen bezeichnet. Join gibt eine Spalte mit dem Namen Key an Es ist eine Operation, um die Zeilen mit demselben Wert im Schlüssel zweier Datenbanken horizontal zu verbinden.

Art der Bindung

Es gibt zwei Hauptverbindungsmethoden: Innenverbindung und Außenverbindung. Verbinden Sie die folgenden zwei DataFrames in der Spalte "Früchte".

image.png

Innere Verbindung

Zeilen, die keinen gemeinsamen Wert in der Spalte Schlüssel haben, werden verworfen. Lassen Sie auch andere Zeilen, die dieselbe Spalte haben und deren Werte nicht übereinstimmen Alternativ können Sie angeben, dass es verworfen werden soll. Sie können sehen, dass nur die gemeinsamen "Früchte" -Spaltendaten der beiden DataFrames übrig bleiben.

image.png

Äußere Verbindung

Einige Zeilen haben keinen gemeinsamen Wert in der Spalte Schlüssel. Elemente, die keinen Wert haben, werden mit NaN gefüllt. Sie können sehen, dass NaN in die Zeilenrichtungsdaten von "Kiwifruit" und "Mango" eingefügt wird.

image.png

Inner Join Grundlagen wie = "inner"

Versuchen wir, die beiden DataFrames df1 und df2 intern zu kombinieren.

pandas.merge(df1, df2, on= "Schlüsselspalte", how="inner")

In diesem Fall wird df1 nach links verschoben Zeilen mit nicht übereinstimmenden Werten in der Spalte Schlüssel werden verworfen.

Außerdem bleiben andere allgemeine Spalten als die Schlüsselspalte übrig, deren Werte nicht übereinstimmen. Die Spalte, die zum DataFrame auf der linken Seite gehörte, ist _x Die Spalte auf der rechten Seite hat _y als Suffix. Sofern nicht anders angegeben, ist der DataFrame-Index nicht an dem Prozess beteiligt.

Äußere Join-Grundlagen wie = "äußere"

Lassen Sie uns zwei DataFrames, df1 und df2, äußerlich verbinden.

pandas.merge(df1, df2, on="Schlüsselspalte", how="outer")

In diesem Fall wird die Zeile, in der df1 nach links verschoben wird und die Werte nicht in der Spalte Schlüssel übereinstimmen Elemente ohne Restwert werden mit NaN gefüllt.

Außerdem bleiben allgemeine Spalten mit nicht übereinstimmenden Werten außer der Schlüsselspalte übrig. Die Spalte, die zum DataFrame auf der linken Seite gehörte, ist _x, Die Spalte auf der rechten Seite hat _y als Suffix. Sofern nicht anders angegeben, ist der DataFrame-Index nicht an dem Prozess beteiligt.

Kombinieren Sie Spalten, die nicht denselben Namen wie Key haben

Von den beiden DataFrames Order_df (links), eine mit Bestellinformationen Angenommen, der andere ist customer_df (rechts) mit Kundeninformationen.

In den Bestellinformationen lautet die Spalte mit der ID des einkaufenden Kunden "customer_id". In den Kundeninformationen lautet die Spalte mit der Kunden-ID "ID".

Die Spalten der Spalten, denen Sie entsprechen möchten, stimmen nicht überein.

In diesem Fall geben Sie die Spalte an, die Sie als Schlüssel verwenden möchten Sie können Spalten von DataFrames mit verschiedenen Spalten in der Korrespondenz kombinieren.

pandas.merge(Linke DF,Rechter DF, left_on="Linke DFのカラム", right_on="Rechte DF-Spalte", how="Verbindungsmethode")

image.png

Mit Index als Schlüssel verbinden

Wenn der zum Verbinden von DataFrames verwendete Schlüssel ein Index ist Geben Sie den Index an, anstatt die Spalten des DataFrame anzugeben.

left_index=True #Linker DF-Index
right_index=True #DF-Index rechts
import pandas as pd

#Bestellinformationen
order_df = pd.DataFrame([[1000, 2546, 103],
                         [1001, 4352, 101],
                         [1002, 342, 101],
                         [1003, 1192, 102]],
                         columns=["id", "item_id", "customer_id"])
#Kundeninformation
customer_df = pd.DataFrame([["Tanaka"],
                           ["Suzuki"],
                           ["Kato"]],
                           columns=["name"])
customer_df.index = [101, 102, 103] #Ändern Sie hier den Indexwert

# order_df und kunde_Kombinieren Sie df mit der Kunden-ID, um Schlüssel und Bestellung_Ersatz in df
order_df = pd.merge(order_df, customer_df, left_on="customer_id", right_index=True, how="inner")
# right_index=Wahr und Kunde_Verbindet dieselbe Zeile wie id.

print(order_df)

#Ausgabe
    id  item_id  customer_id    name
0  1000     2546          103    Kato
1  1001     4352          101  Tanaka
2  1002      342          101  Tanaka
3  1003     1192          102  Suzuki

#Ausgabe(customer_df.ohne Index, wie="outer"Im Falle von)

       id  item_id  customer_id    name
0  1000.0   2546.0          103     NaN
1  1001.0   4352.0          101     NaN
2  1002.0    342.0          101     NaN
3  1003.0   1192.0          102     NaN
3     NaN      NaN            0  Tanaka
3     NaN      NaN            1  Suzuki
3     NaN      NaN            2    Kato

Datenanalyse mit DataFrame

Holen Sie sich einige Zeilen

Wenn die zu verarbeitende Datenmenge sehr groß ist, sind die Ausgabedaten begrenzt.

df.head() #Gibt einen DataFrame zurück, der nur die ersten 5 Zeilen enthält.
df.tail() #Gibt einen DataFrame zurück, der nur die letzten 5 Zeilen enthält.

Wenn Sie einen ganzzahligen Wert als Argument angeben, können Sie am Anfang oder Ende eine beliebige Anzahl von Zeilen angeben. Sie können einen DataFrame erhalten. Die Methoden head () und tail () können auch mit Variablen vom Typ Serie verwendet werden.

Berechnungsverarbeitung anwenden

Wenn Sie Series oder DataFrame an die von NumPy bereitgestellte Funktion übergeben Sie können die Berechnungsverarbeitung auf alle Elemente anwenden.

Wenn Sie einen DataFrame an eine Funktion übergeben, die ein NumPy-Array empfängt Der Berechnungsprozess wird gemeinsam für jede Spalte durchgeführt.

Außerdem unterstützt Pandas Sendungen wie NumPy. Verwenden Sie den regulären Ausdruck "+ - * /", um zwischen Pandas und zwischen Pandas und ganzen Zahlen zu berechnen. Kann verarbeitet werden.

Erhalten Sie zusammenfassende Statistiken

Zusammenfassende Statistik: Eine Zusammenfassung statistischer Informationen wie Durchschnitts-, Maximal- und Minimalwerte für jede Spalte.

Wenn die Variable vom Typ DataFrame df ist

df.describe() 
#Beinhaltet die Anzahl pro Spalte von df, Mittelwert, Standardabweichung, Minimum, Quadrant, Maximum usw.
#Gibt einen DataFrame zurück.

Beachten Sie, dass die angezeigten Zusammenfassungsstatistiken je nach Datentyp variieren. Zeilen und Elemente können auch unter Verwendung von loc und at zusammen erhalten werden.

Der Name der Zusammenfassungsstatistik wird für den Index des erhaltenen DataFrame verwendet.

import numpy as np
import pandas as pd

np.random.seed(0)
columns = ["apple", "orange", "banana", "strawberry", "kiwifruit"]

#Generieren Sie DataFrame und fügen Sie Spalten hinzu
df = pd.DataFrame()
for column in columns:
    df[column] = np.random.choice(range(1, 11), 10)
df.index = range(1, 11)

#Von der zusammenfassenden Statistik von df"mean", "max", "min"Nehmen Sie df heraus_Ersatz in des.
df_des = df.describe().loc[["mean","max","min"]]
# df.describe()Gibt nur einen Datenrahmen zurück, daher müssen Sie ihn mit loc angeben.


print(df_des)
#Ausgabe
      apple  orange  banana  strawberry  kiwifruit
mean    5.1     6.9     5.6         4.1        5.3
max    10.0     9.0    10.0         9.0       10.0
min     1.0     2.0     1.0         1.0        1.0

Finden Sie den Unterschied zwischen Zeilen oder Spalten eines DataFrame

Die Operation zum Ermitteln des Unterschieds zwischen Linien ist eine Funktion, die insbesondere bei der Zeitreihenanalyse verwendet wird. Wenn die Variable vom Typ DataFrame df ist

df.diff() #Gibt einen DataFrame zurück, der die Differenz zwischen Zeilen oder Spalten berechnet.
df.diff(periods=Zeilen- oder Spaltenabstand, axis=Achsenrichtung)
# periods=Kann ausgelassen werden
#Wenn das erste Argument positiv ist, wird die Differenz zur vorherigen Zeile berechnet, und wenn es negativ ist, wird die Differenz zur nachfolgenden Zeile berechnet.
#Wenn die Achse 0 ist, ist sie in Zeilenrichtung und wenn sie 1 ist, ist sie in Spaltenrichtung.
import numpy as np
import pandas as pd

np.random.seed(0)
columns = ["apple", "orange", "banana", "strawberry", "kiwifruit"]

#Generieren Sie DataFrame und fügen Sie Spalten hinzu
df = pd.DataFrame()
for column in columns:
    df[column] = np.random.choice(range(1, 11), 10)
df.index = range(1, 11)

#Df für jede Zeile von df den DataFrame, der die Differenz zur Zeile nach 2 Zeilen berechnet hat_Ersatz in diff.
df_diff = df.diff(periods="-2",axis=0)
#Oder df_diff = df.diff(-2, axis=0)

#df und df_Überprüfen Sie den Verarbeitungsinhalt, indem Sie die Diff-Daten vergleichen.
print(df)
print()
print(df_diff)

#Ausgabe
apple  orange  banana  strawberry  kiwifruit
1       6       8       6           3         10
2       1       7      10           4         10
3       4       9       9           9          1
4       4       9      10           2          5
5       8       2       5           4          8
6      10       7       4           4          4
7       4       8       1           4          3
8       6       8       4           8          8
9       3       9       6           1          3
10      5       2       1           2          1

    apple  orange  banana  strawberry  kiwifruit
1     2.0    -1.0    -3.0        -6.0        9.0
2    -3.0    -2.0     0.0         2.0        5.0
3    -4.0     7.0     4.0         5.0       -7.0
4    -6.0     2.0     6.0        -2.0        1.0
5     4.0    -6.0     4.0         0.0        5.0
6     4.0    -1.0     0.0        -4.0       -4.0
7     1.0    -1.0    -5.0         3.0        0.0
8     1.0     6.0     3.0         6.0        7.0
9     NaN     NaN     NaN         NaN        NaN
10    NaN     NaN     NaN         NaN        NaN

Gruppierung

Für Datenbanken und DataFrames Aggregieren von Zeilen mit demselben Wert für eine bestimmte Spalte Dies wird als Gruppierung bezeichnet.

Wenn die Variable vom Typ DataFrame df ist

df.groupby("Säule") # 指定したSäule(列)でグループ化を行います。

Zu diesem Zeitpunkt wird ein GroupBy-Objekt zurückgegeben. Sie können die gruppierten Ergebnisse nicht direkt anzeigen.

Sie können die folgenden Vorgänge für das GroupBy-Objekt ausführen.

mean() #Finden Sie den Durchschnittswert für jede Gruppe
sum () #Führen Sie Operationen wie das Finden der Summe aus

Recommended Posts

Anwendung von Python: Pandas Teil 4: Verketten und Kombinieren von DataFrames
Python-Anwendung: Pandas # 3: Dataframe
Python-Anwendung: Pandas Teil 1: Basic
Python-Anwendung: Pandas Teil 2: Serie
[Python] Zufällige Datenextraktion / -kombination aus DataFrame mit Random und Pandas
Python-Handspiel (Pandas / DataFrame-Beginn)
[Python] Operationsnotiz von Pandas DataFrame
Python-Anwendung: Datenverarbeitung # 3: Datenformat
Python-Anwendung: Numpy Teil 3: Double Array
Python-Anwendung: Datenvisualisierung Teil 1: Grundlegend
Anwendung von Python: Datenbereinigung Teil 2: Datenbereinigung mit DataFrame
[Python] Was ist Pandas Series und DataFrame?
Anwendung von Python: Datenvisualisierung Teil 3: Verschiedene Grafiken
[Python] Fügen Sie Pandas DataFrame insgesamt Zeilen hinzu
QGIS + Python Teil 2
Python: Strings kombinieren
Meine Pandas (Python)
QGIS + Python Teil 1
[Python-Pandas] Erstellen Sie einen leeren DataFrame aus einem vorhandenen DataFrame
Python-Pandas: Suchen Sie mit regulären Ausdrücken nach DataFrame
[Python] Erstellen Sie eine Tabelle von Pandas DataFrame zu Postgres
[Python] Sortieren Sie die Tabelle nach sort_values (pandas DataFrame)
Python: Scraping Teil 1
[Python-Lernteil 3] Konvertieren Sie Pandas DataFrame, Series und Standard List ineinander
Anwendung von Python: Datenverarbeitung Teil 2: Analyse verschiedener Datenformate
Python Pandas Memo
Lösung Wenn Sie Python 3.6 oder höher verwenden, benötigen Sie die enum34-Bibliothek ebenfalls nicht. Deinstallieren Sie sie daher und verwenden Sie das Standard-Enum-Modul. Enum34 deinstallieren Führen Sie nach der Deinstallation von enum34 erneut `pip install optuna` aus und Sie haben Optuna erfolgreich installiert! Python, pip, Python3, enum, OptunaPython3 Beginn Teil 1
Python: Scraping Teil 2
Pandas Serie Teil 1
Grundlegende Bedienung von Python Pandas Series und Dataframe (1)
Zusammenfassung der Vorverarbeitungsmethoden für Python-Anfänger (Pandas-Datenrahmen)
Webanwendung erstellt mit Python3.4 + Django (Teil.1 Umgebungskonstruktion)
[Python] Zusammenfassung der Methode zur Tabellenerstellung mit DataFrame (Pandas)
"My Graph Generation Application" von Python (PySide + PyQtGraph) Teil 1
Einführung in Python numpy pandas matplotlib (für ~ B3 ~ part2)
Pandas auf python2.6 installieren
Python Basic Memorandum Teil 2
Python-Grundnotiz - Teil 2
Python-Grundnotiz - Teil 1
Anwendung von Python 3 vars
Python Basic - Pandas, Numpy -
Konvertieren Sie mit Python für .NET von Pandas DataFrame in System.Data.DataTable
Python-Anwendung: Datenverarbeitung Teil 1: Datenformatierung und Dateieingabe / -ausgabe