So installieren Sie das pandas-Paket und arbeiten mit Datenstrukturen in Python 3

Einführung

Das Paket Pythonpandaswird 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 Paketpandasarbeiten.

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 vonpandasfunktioniert, 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

count

Frequenzzählung; die Häufigkeit, mit der etwas auftritt

mean

Der Mittelwert oder Durchschnitt

std

Die Standardabweichung, ein numerischer Wert, der angibt, wie stark die Daten variieren

min

Die minimale oder kleinste Anzahl im Satz

25%

25. Perzentil

50%

50. Perzentil

75%

75. Perzentil

max

Die maximale oder größte Anzahl im Satz

Lassen Sie Python diese statistischen Daten für uns ausdrucken, indem Sie den DataFrame vonocean_depthsmit 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.