Python Pandas-Tutorial: DataFrame, Datumsbereich & Verwendung
⚡ Intelligente Zusammenfassung
Pandas ist die Open-Source-Software Python Bibliothek zur Bearbeitung tabellarischer Daten. Sie stellt die Strukturen Series und DataFrame, Datumsbereiche, Hilfsfunktionen zur Datenprüfung sowie die in dieser Anleitung gezeigten Operationen slice, drop, concatenate, sort und rename bereit.
Was sind Pandas in Python?
Pandas ist eine Open-Source-Bibliothek, mit der Sie Datenmanipulation und -analyse durchführen können in PythonEs deckt sowohl numerische Tabellen als auch Zeitreihen ab. Es bietet eine einfache Möglichkeit, Daten zu erstellen, zu bearbeiten und zu verwalten, und basiert auf … NumPyDaher muss NumPy vorhanden sein, damit Pandas funktioniert.
Warum Pandas verwenden?
Datenwissenschaftler nutzen Pandas in Python aus folgenden Vorteilen:
- Behandelt fehlende Daten problemlos
- Es verwendet Series für eindimensionale Daten und DataFrame für mehrdimensionale Daten.
- Es bietet eine effiziente Möglichkeit, die Daten aufzuteilen
- Es bietet eine flexible Möglichkeit, die Daten zusammenzuführen, zu verketten oder umzuformen
- Es beinhaltet ein leistungsstarkes Toolkit für Zeitreihenanalysen.
Kurz gesagt, Pandas bietet leistungsstarke, einfach zu bedienende Datenstrukturen sowie die Möglichkeit, diese schnell zu verarbeiten. Deshalb bildet es den Ankerpunkt der meisten Python Datenanalyse Arbeit.
So installieren Sie Pandas
Pandas wird mit Anaconda und den meisten Managed Notebook Services ausgeliefert und ist daher in der Regel bereits installiert. Falls der Import fehlschlägt, kann Pandas mit einem der folgenden Befehle hinzugefügt werden. Die Umgebung ist integriert. So installieren Sie TensorFlow Enthält auch Pandas.
- Pip:
pip install pandas - Anakonda:
conda install -c anaconda pandas - In einem Jupyter Notizbuch Zelle:
import sys !conda install --yes --prefix {sys.prefix} pandas
Was ist ein Pandas-DataFrame?
Ein Pandas DataFrame ist eine zweidimensionale, beschriftete Datenstruktur, deren Spalten unterschiedliche Datentypen enthalten können. Es ist die Standardmethode zur tabellarischen Datenspeicherung: Die Zeilen enthalten die Beobachtungen und die Spalten benennen die Informationen. Zum Beispiel: Preis kann der Name einer Spalte sein und 2, 3, 4 können die Preiswerte sein.
Dataframes sind Statistikern und anderen Datenexperten wohlbekannt. Die Abbildung unten zeigt deren Struktur – eine Zeilenindexierung an der Seite und benannte Spalten oben.
Was ist eine Serie?
Eine Series ist eine eindimensionale Datenstruktur. Sie kann beliebige Datentypen wie Integer, Float oder String aufnehmen und ist nützlich, wenn Sie eine Berechnung durchführen oder ein eindimensionales Array zurückgeben möchten. Per Definition kann eine Series keine mehreren Spalten haben; verwenden Sie in diesem Fall die DataFrame-Struktur.
Der Pandas Series-Konstruktor akzeptiert die folgenden Parameter:
- Datum: kann eine Liste, ein Wörterbuch oder ein Skalarwert sein
pd.Series([1., 2., 3.])
0 1.0 1 2.0 2 3.0 dtype: float64
Sie können einen Index hinzufügen mit indexEs benennt die Zeilen, und seine Länge muss der Spaltenbreite entsprechen.
pd.Series([1., 2., 3.], index=['a', 'b', 'c'])
Im Folgenden erstellen Sie eine Pandas Series mit einem fehlenden Wert in der dritten Zeile. Fehlende Werte in Python werden angezeigt als NaN und np.nan von NumPy wird künstlich erzeugt.
pd.Series([1,2,np.nan])
Ausgang
0 1.0 1 2.0 2 NaN dtype: float64
Erstellen Sie einen Pandas-DataFrame
Sie können ein NumPy-Array in einen DataFrame konvertieren mit pd.DataFrame()Auch das Gegenteil ist möglich: Um einen DataFrame wieder in ein Array umzuwandeln, verwenden Sie np.array()den df.to_numpy(), was auch die aktuelle Pandas-Dokumentation empfiehlt.
## Numpy to pandas import numpy as np h = [[1,2],[3,4]] df_h = pd.DataFrame(h) print('Data Frame:', df_h) ## Pandas to numpy df_h_n = np.array(df_h) print('Numpy array:', df_h_n) Data Frame: 0 1 0 1 2 1 3 4 Numpy array: [[1 2] [3 4]]
Ein Wörterbuch eignet sich genauso gut als Eingabe für pd.DataFrame().
dic = {'Name': ["John", "Smith"], 'Age': [30, 40]}
pd.DataFrame(data=dic)
| Alter | Name | |
|---|---|---|
| 0 | 30 | Peter |
| 1 | 40 | Smith |
Daten zur Pandas-Reichweite
Pandas bietet eine komfortable API zum Erstellen eines Datumsbereichs, der als Index einer Zeitreihe dient. Der Aufruf hat folgende Form:
pd.date_range(start, periods, freq):
- Der erste Parameter ist das Startdatum
- Der zweite Parameter ist die Anzahl der Perioden (optional, wenn das Enddatum angegeben ist)
- Der letzte Parameter ist die Häufigkeit: Tag
D, MonatMund JahrY
## Create date # Days dates_d = pd.date_range('20300101', periods=6, freq='D') print('Day:', dates_d)
Ausgang
Day: DatetimeIndex(['2030-01-01', '2030-01-02', '2030-01-03', '2030-01-04', '2030-01-05', '2030-01-06'], dtype='datetime64[ns]', freq='D')
# Months dates_m = pd.date_range('20300101', periods=6, freq='M') print('Month:', dates_m)
Ausgang
Month: DatetimeIndex(['2030-01-31', '2030-02-28', '2030-03-31', '2030-04-30','2030-05-31', '2030-06-30'], dtype='datetime64[ns]', freq='M')
Versionshinweis: der Monat Alias M Die oben verwendete Methode ist ab Pandas 2.2 veraltet und wurde in Pandas 3.0 entfernt. In aktuellen Versionen ist dies erforderlich. freq='ME' zum Monatsende; der resultierende Index ist identisch.
Daten prüfen
Sie können den Anfang oder das Ende eines Datensatzes überprüfen mit head() or tail() wird auf dem DataFrame aufgerufen, wie das folgende Pandas-Beispiel zeigt.
Schritt 1) Erstelle mit NumPy eine Zufallsfolge. Die Folge hat 4 Spalten und 6 Zeilen.
random = np.random.randn(6,4)
Schritt 2) Anschließend erstellen Sie mit Pandas einen DataFrame.
Arbeiten jederzeit weiterbearbeiten können. Jede Präsentation und jeder KI-Avatar, den Sie von Grund auf neu erstellen oder hochladen, dates_m als Index, sodass jede Zeile einen Namen erhält, der einem Datum entspricht, und die 4 Spalten werden mit dem columns Argument.
# Create data with date df = pd.DataFrame(random, index=dates_m, columns=list('ABCD'))
Parce que np.random.randn() Läuft ohne Saatgut, Ihre Ergebnisse werden von den hier angegebenen abweichen. Anrufen np.random.seed(0) Zuerst, wenn Sie einen festen Satz reproduzieren möchten.
Schritt 3) Verwendung der Kopffunktion
df.head(3)
| A | B | C | D | |
|---|---|---|---|---|
| 2030-01-31 | 1.139433 | 1.318510 | -0.181334 | 1.615822 |
| 2030-02-28 | -0.081995 | -0.063582 | 0.857751 | -0.527374 |
| 2030-03-31 | -0.519179 | 0.080984 | -1.454334 | 1.314947 |
Schritt 4) Verwendung der tail-Funktion
df.tail(3)
| A | B | C | D | |
|---|---|---|---|---|
| 2030-04-30 | -0.685448 | -0.011736 | 0.622172 | 0.104993 |
| 2030-05-31 | -0.935888 | -0.731787 | -0.558729 | 0.768774 |
| 2030-06-30 | 1.096981 | 0.949180 | -0.196901 | -0.471556 |
Schritt 5) Eine hervorragende Möglichkeit, einen Hinweis auf die Daten zu erhalten, ist describe()Es werden die Anzahl, der Mittelwert, die Standardabweichung, das Minimum, das Maximum und die Perzentile des Datensatzes ausgegeben.
df.describe()
| A | B | C | D | |
|---|---|---|---|---|
| zählen | 6.000000 | 6.000000 | 6.000000 | 6.000000 |
| bedeuten | 0.002317 | 0.256928 | -0.151896 | 0.467601 |
| std | 0.908145 | 0.746939 | 0.834664 | 0.908910 |
| min | -0.935888 | -0.731787 | -1.454334 | -0.527374 |
| 25% | -0.643880 | -0.050621 | -0.468272 | -0.327419 |
| 50% | -0.300587 | 0.034624 | -0.189118 | 0.436883 |
| 75% | 0.802237 | 0.732131 | 0.421296 | 1.178404 |
| max | 1.139433 | 1.318510 | 0.857751 | 1.615822 |
Slice-Daten
Durch das Slicing wird eine Teilmenge von Zeilen oder Spalten aus einem DataFrame extrahiert. Sie können den Spaltennamen verwenden, um beispielsweisetracin einer Spalte, wie das folgende Pandas-Beispiel zeigt.
## Slice ### Using name df['A'] 2030-01-31 -0.168655 2030-02-28 0.689585 2030-03-31 0.767534 2030-04-30 0.557299 2030-05-31 -1.547836 2030-06-30 0.511551 Freq: M, Name: A, dtype: float64
Um mehrere Spalten auszuwählen, benötigen Sie doppelte eckige Klammern. [[..,..]]Das erste Paar bedeutet, dass Sie Spalten auswählen möchten; das zweite Paar gibt an, welche Spalten zurückgegeben werden sollen.
df[['A', 'B']]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
Sie können die Zeilen mithilfe eines Doppelpunkts trennen. Der folgende Code gibt die ersten drei Zeilen zurück.
### using a slice for row
df[0:3]
| A | B | C | D | |
|---|---|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 | 0.572301 | -0.031827 |
| 2030-02-28 | 0.689585 | 0.998266 | 1.164690 | 0.475975 |
| 2030-03-31 | 0.767534 | -0.940617 | 0.227255 | -0.341532 |
Das loc Der Accessor wählt Spalten anhand ihres Namens aus. Wie üblich steht der Wert vor dem Komma für die Zeilen und der Wert danach für die Spalten; eckige Klammern sind erforderlich, um mehr als eine Spalte auszuwählen.
## Multi col df.loc[:,['A','B']]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
Es gibt noch eine andere Methode, um mehrere Zeilen und Spalten auszuwählen. iloc[] Verwendet ganzzahlige Positionen anstelle von Spaltennamen, daher gibt der folgende Code das gleiche DataFrame zurück wie oben.
df.iloc[:, :2]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
Löschen Sie eine Spalte
Sie können Spalten löschen mit df.drop()und die Namen in der columns Argument.
df.drop(columns=['A', 'C'])
| B | D | |
|---|---|---|
| 2030-01-31 | 0.587590 | -0.031827 |
| 2030-02-28 | 0.998266 | 0.475975 |
| 2030-03-31 | -0.940617 | -0.341532 |
| 2030-04-30 | 0.507350 | -0.296035 |
| 2030-05-31 | 1.276558 | 0.523017 |
| 2030-06-30 | 1.572085 | -0.594772 |
Verkettung
Sie können zwei DataFrames mit folgender Methode verketten: pd.concat()Zuerst werden die beiden Rahmen erstellt.
import numpy as np df1 = pd.DataFrame({'name': ['John', 'Smith','Paul'], 'Age': ['25', '30', '50']}, index=[0, 1, 2]) df2 = pd.DataFrame({'name': ['Adam', 'Smith' ], 'Age': ['26', '11']}, index=[3, 4])
Anschließend werden sie miteinander verkettet.
df_concat = pd.concat([df1,df2]) df_concat
| Alter | Name | |
|---|---|---|
| 0 | 25 | Peter |
| 1 | 30 | Smith |
| 2 | 50 | Paul |
| 3 | 26 | Marcus |
| 4 | 11 | Smith |
Duplikate löschen
Wenn ein Datensatz doppelte Informationen enthält, drop_duplicates() ist eine einfache Möglichkeit, die wiederholten Zeilen auszuschließen. df_concat enthält eine doppelte Beobachtung: Smith erscheint zweimal in der name Spalte.
df_concat.drop_duplicates('name')
| Alter | Name | |
|---|---|---|
| 0 | 25 | Peter |
| 1 | 30 | Smith |
| 2 | 50 | Paul |
| 3 | 26 | Marcus |
Werte sortieren
Sie können einen Rahmen sortieren mit sort_values(). Beachten Sie, dass Age wurde hier als Text erstellt, daher werden die Zeilen in Zeichenkettenreihenfolge sortiert.
df_concat.sort_values('Age')
| Alter | Name | |
|---|---|---|
| 4 | 11 | Smith |
| 0 | 25 | Peter |
| 3 | 26 | Marcus |
| 1 | 30 | Smith |
| 2 | 50 | Paul |
Spalten umbenennen
Arbeiten jederzeit weiterbearbeiten können. Jede Präsentation und jeder KI-Avatar, den Sie von Grund auf neu erstellen oder hochladen, rename() Um eine Spalte in Pandas umzubenennen. In jedem Paar ist der erste Wert der aktuelle Spaltenname und der zweite der neue.
df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
| Alter_Person | Nachname | |
|---|---|---|
| 0 | 25 | Peter |
| 1 | 30 | Smith |
| 2 | 50 | Paul |
| 3 | 26 | Marcus |
| 4 | 11 | Smith |
Pandas-Methoden – Kurzübersicht
Diese Tabelle ordnet jede gängige Aufgabe der entsprechenden Pandas-Methode zu.
| Aufgabe | Methodik |
|---|---|
| Daten importieren | read_csv |
| Serien erstellen | Modellreihe |
| Datenrahmen erstellen | Datenrahmen |
| Datumsbereich erstellen | Datumsbereich |
| Kopf zurück | ganzer |
| Schwanz zurück | Schwanz |
| Beschreiben | beschreiben |
| Slice mit Namen | Datenname['Spaltenname'] |
| Mit Reihen schneiden | Datenname[0:5] |

