Einführung
Das Paket Pythonpandas
wird zur Datenmanipulation und -analyse verwendet, damit Sie intuitiver mit beschrifteten oder relationalen Daten arbeiten können.
pandas
basiert auf dem Paketnumpy
und enthält Beschriftungen und beschreibende Indizes. Es ist besonders robust im Umgang mit gängigen Datenformaten und fehlenden Daten.
Daspandas
-Paket bietet Tabellenkalkulationsfunktionen, aber die Arbeit mit Daten ist mit Python viel schneller als mit einer Tabellenkalkulation, undpandas
erweist sich als sehr effizient.
In diesem Tutorial installieren wir zuerstpandas
und orientieren Sie dann an den grundlegenden Datenstrukturen:Series undDataFrames.
pandas
installieren
Wie bei anderen Python-Paketen können wirpandas
mitpip
installieren.
Gehen wir zunächst zu unserenlocal programming environment oderserver-based programming environment Ihrer Wahl und installieren dortpandas
zusammen mit ihren Abhängigkeiten:
pip install pandas numpy python-dateutil pytz
Sie sollten eine Ausgabe ähnlich der folgenden erhalten:
OutputSuccessfully installed pandas-0.19.2
Wenn Siepandas
lieber innerhalb vonAnaconda installieren möchten, können Sie dies mit dem folgenden Befehl tun:
conda install pandas
An diesem Punkt können Sie mit dem Paketpandas
arbeiten.
Serie
Inpandas
sindSeries eindimensionale Arrays, die beliebigedata type enthalten können. Die Achsenbeschriftungen werden zusammen alsindex bezeichnet.
Starten Sie den Python-Interpreter folgendermaßen in Ihrer Befehlszeile:
python
Importieren Sie aus dem Interpreter heraus die Paketenumpy
undpandas
in Ihren Namespace:
import numpy as np
import pandas as pd
Bevor wir mit Series arbeiten, werfen wir einen Blick darauf, wie es allgemein aussieht:
s = pd.Series([data], index=[index])
Möglicherweise stellen Sie fest, dass die Daten wie Pythonlist strukturiert sind.
Ohne Angabe eines Index
Wir geben ganzzahlige Daten ein und geben dann einen Namensparameter für die Serie an. Wir vermeiden jedoch die Verwendung des Parametersindex
, um zu sehen, wiepandas
ihn implizit auffüllt:
s = pd.Series([0, 1, 4, 9, 16, 25], name='Squares')
Rufen wir nun die Serie auf, damit wir sehen können, waspandas
damit macht:
s
Wir sehen die folgende Ausgabe mit dem Index in der linken Spalte und unseren Datenwerten in der rechten Spalte. Unterhalb der Spalten finden Sie Informationen zum Namen der Serie und zum Datentyp, aus dem die Werte bestehen.
Output0 0
1 1
2 4
3 9
4 16
5 25
Name: Squares, dtype: int64
Obwohl wir keinen Index für das Array angegeben haben, wurde implizit einer der ganzzahligen Werte0
bis5
hinzugefügt.
Index deklarieren
Wie die obige Syntax zeigt, können wir auch Reihen mit einem expliziten Index erstellen. Wir verwenden Daten zur durchschnittlichen Tiefe der Ozeane der Erde in Metern:
avg_ocean_depth = pd.Series([1205, 3646, 3741, 4080, 3270], index=['Arctic', 'Atlantic', 'Indian', 'Pacific', 'Southern'])
Rufen wir die Serie auf, um die Ausgabe zu sehen:
avg_ocean_depth
OutputArctic 1205
Atlantic 3646
Indian 3741
Pacific 4080
Southern 3270
dtype: int64
Wir können sehen, dass der Index, den wir bereitgestellt haben, links mit den Werten rechts ist.
Indizierungs- und Slicing-Serie
Mitpandas
Series können wir nach entsprechender Zahl indizieren, um Werte abzurufen:
avg_ocean_depth[2]
Output3741
Wir können auch nach Indexnummer schneiden, um Werte abzurufen:
avg_ocean_depth[2:4]
OutputIndian 3741
Pacific 4080
dtype: int64
Zusätzlich können wir den Wert des Indexes aufrufen, um den Wert zurückzugeben, dem er entspricht:
avg_ocean_depth['Indian']
Output3741
Wir können auch mit den Werten des Index schneiden, um die entsprechenden Werte zurückzugeben:
avg_ocean_depth['Indian':'Southern']
OutputIndian 3741
Pacific 4080
Southern 3270
dtype: int64
Beachten Sie, dass in diesem letzten Beispiel beim Schneiden mit Indexnamen die beiden Parameter inklusiv und nicht exklusiv sind.
Beenden wir den Python-Interpreter mitquit()
.
Serie mit Wörterbüchern initialisiert
Mitpandas
können wir auch den Datentypdictionary verwenden, um eine Serie zu initialisieren. Auf diese Weise deklarieren wir keinen Index als separate Liste, sondern verwenden stattdessen die integrierten Schlüssel als Index.
Erstellen Sie eine Datei mit dem Namenocean.py
und fügen Sie das folgende Wörterbuch mit einem Aufruf zum Drucken hinzu.
ocean.py
import numpy as np
import pandas as pd
avg_ocean_depth = pd.Series({
'Arctic': 1205,
'Atlantic': 3646,
'Indian': 3741,
'Pacific': 4080,
'Southern': 3270
})
print(avg_ocean_depth)
Jetzt können wir die Datei in der Befehlszeile ausführen:
python ocean.py
Wir erhalten folgende Ausgabe:
OutputArctic 1205
Atlantic 3646
Indian 3741
Pacific 4080
Southern 3270
dtype: int64
Die Reihe wird in organisierter Weise angezeigt, wobei sich der Index (bestehend aus unseren Schlüsseln) links und der Wertesatz rechts befinden.
Dies verhält sich wie bei anderen Python-Wörterbüchern, da Sie durch Aufrufen des Schlüssels auf Werte zugreifen können.
ocean_depth.py
...
print(avg_ocean_depth['Indian'])
print(avg_ocean_depth['Atlantic':'Indian'])
Output3741
Atlantic 3646
Indian 3741
dtype: int64
Diese Serien sind jedoch jetzt Python-Objekte, sodass Sie keine Wörterbuchfunktionen verwenden können.
Python-Wörterbücher bieten eine andere Form zum Einrichten von Serien inpandas
.
Datenrahmen
DataFrames sind zweidimensional beschriftete Datenstrukturen mit Spalten, die aus verschiedenen Datentypen bestehen können.
DataFrames ähneln Tabellenkalkulationen oder SQL-Tabellen. Wenn Sie mitpandas
arbeiten, sind DataFrames im Allgemeinen das am häufigsten verwendete Objekt.
Um zu verstehen, wie der DataFrame vonpandas
funktioniert, richten wir zwei Serien ein und übergeben diese an einen DataFrame. Die erste Serie wird unsereavg_ocean_depth
-Serie von zuvor sein, und unsere zweite wirdmax_ocean_depth
sein, die Daten der maximalen Tiefe jedes Ozeans auf der Erde in Metern enthält.
ocean.py
import numpy as np
import pandas as pd
avg_ocean_depth = pd.Series({
'Arctic': 1205,
'Atlantic': 3646,
'Indian': 3741,
'Pacific': 4080,
'Southern': 3270
})
max_ocean_depth = pd.Series({
'Arctic': 5567,
'Atlantic': 8486,
'Indian': 7906,
'Pacific': 10803,
'Southern': 7075
})
Wenn diese beiden Serien eingerichtet sind, fügen wir den DataFrame am Ende der Datei unterhalb dermax_ocean_depth
-Serie hinzu. In unserem Beispiel haben beide Serien die gleichen Indexbezeichnungen. Wenn Sie jedoch Serien mit unterschiedlichen Bezeichnungen hätten, würden fehlende Werte alsNaN
bezeichnet.
Dies ist so aufgebaut, dass wir Spaltenbeschriftungen einfügen können, die wir als Schlüssel für die Variablen der Reihe deklarieren. Um zu sehen, wie der DataFrame aussieht, rufen wir ihn zum Drucken auf.
ocean.py
...
max_ocean_depth = pd.Series({
'Arctic': 5567,
'Atlantic': 8486,
'Indian': 7906,
'Pacific': 10803,
'Southern': 7075
})
ocean_depths = pd.DataFrame({
'Avg. Depth (m)': avg_ocean_depth,
'Max. Depth (m)': max_ocean_depth
})
print(ocean_depths)
Output Avg. Depth (m) Max. Depth (m)
Arctic 1205 5567
Atlantic 3646 8486
Indian 3741 7906
Pacific 4080 10803
Southern 3270 7075
Die Ausgabe enthält unsere beiden Spaltenüberschriften sowie die numerischen Daten darunter. Die Bezeichnungen der Wörterbuchtasten befinden sich links.
Sortieren von Daten in DataFrames
Wir könnensort the data in the DataFrame mit der FunktionDataFrame.sort_values(by=...)
.
Verwenden wir beispielsweise den booleschen Parameterascending
, der entwederTrue
oderFalse
sein kann. Beachten Sie, dassascending
ein Parameter ist, den wir an die Funktion übergeben können, absteigend jedoch nicht.
ocean_depth.py
...
print(ocean_depths.sort_values('Avg. Depth (m)', ascending=True))
Output Avg. Depth (m) Max. Depth (m)
Arctic 1205 5567
Southern 3270 7075
Atlantic 3646 8486
Indian 3741 7906
Pacific 4080 10803
Die Ausgabe zeigt nun die Zahlen in der ganz linken Spalte an, die von niedrigen zu hohen Werten aufsteigen.
Statistische Analyse mit DataFrames
Schauen wir uns als nächstessome summary statistics an, die wir mit der FunktionDataFrame.describe()
auspandas
erfassen können.
Ohne bestimmte Parameter zu übergeben, liefert die FunktionDataFrame.describe()
die folgenden Informationen für numerische Datentypen:
Rückkehr | Was es bedeutet |
---|---|
|
Frequenzzählung; die Häufigkeit, mit der etwas auftritt |
|
Der Mittelwert oder Durchschnitt |
|
Die Standardabweichung, ein numerischer Wert, der angibt, wie stark die Daten variieren |
|
Die minimale oder kleinste Anzahl im Satz |
|
25. Perzentil |
|
50. Perzentil |
|
75. Perzentil |
|
Die maximale oder größte Anzahl im Satz |
Lassen Sie Python diese statistischen Daten für uns ausdrucken, indem Sie den DataFrame vonocean_depths
mit der Funktiondescribe()
aufrufen:
ocean.py
...
print(ocean_depths.describe())
Wenn wir dieses Programm ausführen, erhalten wir die folgende Ausgabe:
Output Avg. Depth (m) Max. Depth (m)
count 5.000000 5.000000
mean 3188.400000 7967.400000
std 1145.671113 1928.188347
min 1205.000000 5567.000000
25% 3270.000000 7075.000000
50% 3646.000000 7906.000000
75% 3741.000000 8486.000000
max 4080.000000 10803.000000
Sie können jetzt die Ausgabe hier mit dem ursprünglichen DataFrame vergleichen und einen besseren Überblick über die durchschnittlichen und maximalen Tiefen der Weltmeere erhalten, wenn Sie als Gruppe betrachtet werden.
Umgang mit fehlenden Werten
Bei der Arbeit mit Daten fehlen häufig Werte. Das Paketpandas
bietet viele verschiedene Möglichkeiten fürworking with missing data, die sich aufnull
Daten beziehen oder auf Daten, die aus irgendeinem Grund nicht vorhanden sind. Inpandas
wird dies als NA-Daten bezeichnet und alsNaN
gerendert.
Wir werdendropping missing values mit der FunktionDataFrame.dropna()
undfilling missing values mit der FunktionDataFrame.fillna()
überschreiten. So stellen Sie sicher, dass Sie bei den ersten Schritten nicht auf Probleme stoßen.
Erstellen wir eine neue Datei mit dem Namenuser_data.py
und füllen sie mit Daten, denen Werte fehlen, und verwandeln sie in einen DataFrame:
user_data.py
import numpy as np
import pandas as pd
user_data = {'first_name': ['Sammy', 'Jesse', np.nan, 'Jamie'],
'last_name': ['Shark', 'Octopus', np.nan, 'Mantis shrimp'],
'online': [True, np.nan, False, True],
'followers': [987, 432, 321, np.nan]}
df = pd.DataFrame(user_data, columns = ['first_name', 'last_name', 'online', 'followers'])
print(df)
Unser Aufruf zum Drucken zeigt uns die folgende Ausgabe, wenn wir das Programm ausführen:
Output first_name last_name online followers
0 Sammy Shark True 987.0
1 Jesse Octopus NaN 432.0
2 NaN NaN False 321.0
3 Jamie Mantis shrimp True NaN
Hier fehlen einige Werte.
Lassen Sie uns zuerst die fehlenden Werte mitdropna()
löschen.
user_data.py
...
df_drop_missing = df.dropna()
print(df_drop_missing)
Da es in unserem kleinen Datensatz nur eine Zeile gibt, in der überhaupt keine Werte fehlen, ist dies die einzige Zeile, die beim Ausführen des Programms intakt bleibt:
Output first_name last_name online followers
0 Sammy Shark True 987.0
Alternativ zum Löschen der Werte können wir stattdessen die fehlenden Werte mit einem Wert unserer Wahl füllen, z. B.0
. Dies erreichen wir mitDataFrame.fillna(0)
.
Löschen oder kommentieren Sie die letzten beiden Zeilen, die wir unserer Datei hinzugefügt haben, und fügen Sie Folgendes hinzu:
user_data.py
...
df_fill = df.fillna(0)
print(df_fill)
Wenn wir das Programm ausführen, erhalten wir die folgende Ausgabe:
Output first_name last_name online followers
0 Sammy Shark True 987.0
1 Jesse Octopus 0 432.0
2 0 0 False 321.0
3 Jamie Mantis shrimp True 0.0
Jetzt sind alle unsere Spalten und Zeilen intakt, und anstattNaN
als unsere Werte zu haben, haben wir jetzt0
, die diese Räume füllen. Sie werden feststellen, dass gegebenenfalls Floats verwendet werden.
Zu diesem Zeitpunkt können Sie Daten sortieren, statistische Analysen durchführen und fehlende Werte in DataFrames verarbeiten.
Fazit
Dieses Tutorial enthielt einführende Informationen für die Datenanalyse mitpandas
und Python 3. Sie sollten jetztpandas
installiert haben und mit den Datenstrukturen Series und DataFrames innerhalb vonpandas
arbeiten können.