Pandas-Datenstrukturen - DataFrame

DataFrame ist eine weitere zentrale Datenstruktur in Pandas, ähnlich einer zweidimensionalen Tabelle oder einer Datentabelle in einer Datenbank.

DataFrame ist eine tabellarische Datenstruktur, die eine Menge geordneter Spalten enthält, von denen jede unterschiedliche Werttypen haben kann (numerische, Zeichenfolgen-, boolesche Werte).

DataFrame hat sowohl Zeilen- als auch Spaltenindizes; es kann als ein Wörterbuch aus Series (mit gemeinsamem Index) angesehen werden.

DataFrame bietet verschiedene Funktionen für Datenzugriff, Filterung, Aufteilung, Zusammenführung, Umformung, Aggregation und Transformationsoperationen.

DataFrame ist eine sehr flexible und leistungsstarke Datenstruktur, die häufig für Aufgaben wie Datenanalyse, Bereinigung, Transformation und Visualisierung verwendet wird.

DataFrame-Merkmale:

  • Zweidimensionale Struktur: DataFrameEs ist eine zweidimensionale Tabelle, die als Excel-Tabelle oder SQL-Tabelle mit Zeilen und Spalten betrachtet werden kann. Sie kann als mehrereSeriesObjekte, die zu einem Wörterbuch zusammengesetzt sind, angesehen werden.

  • Spaltendatentypen:Verschiedene Spalten können unterschiedliche Datentypen enthalten, wie Ganzzahlen, Gleitkommazahlen, Zeichenketten oder Python-Objekte.

  • Index:DataFrameKann Zeilenindizes und Spaltenindizes haben, ähnlich wie Zeilennummern und Spaltenbeschriftungen in Excel.

  • Variable Größe: Kann Spalten hinzufügen und löschen, ähnlich wie ein Wörterbuch in Python.

  • Automatische Ausrichtung: Bei der Durchführung arithmetischer Operationen oder Datenausrichtungsoperationen,DataFrameDie Indizes werden automatisch ausgerichtet.

  • Umgang mit fehlenden Daten:DataFrameKann fehlende Daten enthalten, Pandas verwendetNaN(Keine Zahl), um sie darzustellen.

  • Datenoperationen: Unterstützt Operationen wie Daten-Slicing, Indexierung und Teilmengenaufteilung.

  • Unterstützung für Zeitreihen:DataFrameBietet spezielle Unterstützung für Zeitreihendaten, was einfaches Slicing, Indexierung und Manipulation zeitbasierter Daten ermöglicht.

  • Umfangreiche Datenzugriffsfunktionalität: Durch die.loc、.ilocund.query()Methode können Sie flexibel auf Daten zugreifen und sie filtern.

  • Flexible Datenverarbeitungsfunktionalität: Einschließlich Datenzusammenführung, Umformung, Pivotierung, Gruppierung und Aggregation.

  • Datenvisualisierung: ObwohlDataFrameselbst kein Visualisierungswerkzeug ist, kann es mit Visualisierungsbibliotheken wie Matplotlib oder Seaborn kombiniert werden, um Datenvisualisierung durchzuführen.

  • Effiziente Dateneingabe/-ausgabe: Kann Daten bequem lesen und schreiben und unterstützt mehrere Formate wie CSV, Excel, SQL-Datenbanken und HDF5.

  • Deskriptive Statistik: Bietet eine Reihe von Methoden zur Berechnung deskriptiver Statistiken, wie etwa.describe()、.mean()、.sum()usw.

  • Flexible Datenausrichtung und Integration: Kann leicht mit anderenDataFrameoderSeriesObjekten kombiniert werden, um Zusammenführungs-, Verknüpfungs- oder Aktualisierungsvorgänge durchzuführen.

  • Transformationsfunktionalität: Kann Werte im Datensatz transformieren, beispielsweise mithilfe der.apply()Methode, um benutzerdefinierte Funktionen anzuwenden.

  • Rolling-Window- und Zeitreihenanalyse: Unterstützt Rolling-Window-Statistiken und Zeitreihenanalyse für Datensätze.

Der DataFrame-Konstruktor lautet wie folgt:

pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

Parameter description:

  • data: Der Datenteil des DataFrame, der ein Wörterbuch, ein zweidimensionales Array, Series, DataFrame oder ein anderes Objekt sein kann, das in einen DataFrame konvertiert werden kann. Wenn dieser Parameter nicht angegeben wird, wird ein leerer DataFrame erstellt.
  • index: Der Zeilenindex des DataFrame, der zum Identifizieren jeder Datenzeile verwendet wird. Er kann eine Liste, ein Array, ein Indexobjekt usw. sein. Wenn dieser Parameter nicht angegeben wird, wird ein standardmäßiger ganzzahliger Index erstellt.
  • columns: Der Spaltenindex des DataFrame, der zum Identifizieren jeder Datenspalte verwendet wird. Er kann eine Liste, ein Array, ein Indexobjekt usw. sein. Wenn dieser Parameter nicht angegeben wird, wird ein standardmäßiger ganzzahliger Index erstellt.
  • dtype: Gibt den Datentyp des DataFrame an. Er kann ein NumPy-Datentyp sein, wie z. B.np.int64、np.float64usw. Wenn dieser Parameter nicht angegeben wird, wird der Datentyp automatisch basierend auf den Daten abgeleitet.
  • copy: Ob Daten kopiert werden sollen. Der Standardwert ist False, was bedeutet, dass Daten nicht kopiert werden. Wenn auf True gesetzt, werden die Eingabedaten kopiert.

Pandas DataFrame ist eine zweidimensionale Array-Struktur, ähnlich einem zweidimensionalen Array.

Beispiel - Erstellen mit einer Liste

import pandas as pd

data = [['Google', 10], ['Example', 12], ['Wiki', 13]]

# DataFrame erstellen
df = pd.DataFrame(data, columns=['Site', 'Age'])

# Verwenden Sie die astype-Methode, um den Datentyp jeder Spalte festzulegen
df['Site'] = df['Site'].astype(str)
df['Age'] = df['Age'].astype(float)

print(df)

Sie können auch ein Dictionary verwenden, um eines zu erstellen:

Beispiel - Erstellen mit einem Dictionary

import pandas as pd

data = {'Site':['Google', 'Example', 'Wiki'], 'Age':[10, 12, 13]}

df = pd.DataFrame(data)

print (df)

Das Ausgabeergebnis ist wie folgt:

Das folgende Beispiel verwendet ndarrays zum Erstellen. Die Längen der ndarrays müssen gleich sein. Wenn ein Index übergeben wird, sollte die Länge des Index der Länge der Arrays entsprechen. Wenn kein Index übergeben wird, ist der Index standardmäßig range(n), wobei n die Länge der Arrays ist.

Für ndarrays können Sie auf Folgendes verweisen:NumPy Ndarray-Objekt

Beispiel - Erstellen mit ndarrays

import numpy as np
import pandas as pd

# Erstellen Sie ein zweidimensionales ndarray, das Website und Alter enthält
ndarray_data = np.array([
    ['Google', 10],
    ['Example', 12],
    ['Wiki', 13]
])

# Verwenden Sie den DataFrame-Konstruktor, um ein DataFrame zu erstellen
df = pd.DataFrame(ndarray_data, columns=['Site', 'Age'])

# DataFrame ausgeben
print(df)

Das Ausgabeergebnis ist wie folgt:

An der obigen Ausgabe können wir erkennen, dass der DataFrame-Datentyp eine Tabelle ist, die Zeilen und Spalten enthält:

Sie können auch ein Wörterbuch (Schlüssel/Wert) verwenden, wobei die Schlüssel des Wörterbuchs die Spaltennamen sind:

Beispiel - Erstellen mit einem Dictionary

import pandas as pd

data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]

df = pd.DataFrame(data)

print (df)

Das Ausgabeergebnis ist:

   a   b     c
0  1   2   NaN
1  5  10  20.0

Der Teil ohne entsprechende Daten istNaN。

Pandas kann dasloc-Attribut verwenden, um die Daten einer angegebenen Zeile zurückzugeben. Wenn kein Index festgelegt ist, ist der Index der ersten Zeile0, der Index der zweiten Zeile ist1, und so weiter:

Beispiel

import pandas as pd

data = {
  "calories": [420, 380, 390],
  "duration": [50, 40, 45]
}

# Daten in ein DataFrame-Objekt laden
df = pd.DataFrame(data)

# Die erste Zeile zurückgeben
print(df.loc[0])
# Die zweite Zeile zurückgeben
print(df.loc[1])

Das Ausgabeergebnis ist wie folgt:

calories    420
duration     50
Name: 0, dtype: int64
calories    380
duration     40
Name: 1, dtype: int64

Hinweis:Das zurückgegebene Ergebnis ist tatsächlich ein Pandas-Series-Datenobjekt.

Sie können auch mehrere Datenzeilen zurückgeben, und zwar mit dem[[ ... ]]Format, wobei...die Indizes jeder Zeile sind, durch Kommas getrennt:

Beispiel

import pandas as pd

data = {
  "calories": [420, 380, 390],
  "duration": [50, 40, 45]
}

# Daten in ein DataFrame-Objekt laden
df = pd.DataFrame(data)

# Die erste und zweite Zeile zurückgeben
print(df.loc[[0, 1]])

Das Ausgabeergebnis ist:

   calories  duration
0       420        50
1       380        40

Hinweis:Das zurückgegebene Ergebnis ist tatsächlich ein Pandas-DataFrame-Datenobjekt.

Wir können die Indexwerte angeben, wie im folgenden Beispiel:

Beispiel

import pandas as pd

data = {
  "calories": [420, 380, 390],
  "duration": [50, 40, 45]
}

df = pd.DataFrame(data, index = ["day1", "day2", "day3"])

print(df)

Das Ausgabeergebnis ist:

      calories  duration
day1       420        50
day2       380        40
day3       390        45

Pandas kann dasloc-Attribut verwenden, um die Zeile zurückzugeben, die dem angegebenen Index entspricht:

Beispiel

import pandas as pd

data = {
  "calories": [420, 380, 390],
  "duration": [50, 40, 45]
}

df = pd.DataFrame(data, index = ["day1", "day2", "day3"])

# Index angeben
print(df.loc["day2"])

Das Ausgabeergebnis ist:

calories    380
duration     40
Name: day2, dtype: int64

DataFrame-Methoden

Die gängigen Operationen und Methoden von DataFrame sind in der folgenden Tabelle aufgeführt:

MethodennameFunktionsbeschreibung
head(n)Gibt die ersten n Zeilen des DataFrame zurück (standardmäßig die ersten 5 Zeilen)
tail(n)Gibt die letzten n Zeilen des DataFrame zurück (standardmäßig die letzten 5 Zeilen)
info()Zeigt kurze Informationen über das DataFrame an, einschließlich Spaltennamen, Datentypen, Anzahl der Nicht-Null-Werte usw.
describe()Gibt statistische Informationen für numerische Spalten des DataFrame zurück, wie Mittelwert, Standardabweichung, Minimum usw.
shapeGibt die Anzahl der Zeilen und Spalten des DataFrame zurück (Zeilen, Spalten)
columnsGibt alle Spaltennamen des DataFrame zurück
indexGibt den Zeilenindex des DataFrame zurück
dtypesDen Datentyp jeder Spalte zurückgeben
sort_values(by)Nach einer angegebenen Spalte sortieren
sort_index()Nach Zeilenindex sortieren
dropna()Zeilen oder Spalten mit fehlenden Werten (NaN) verwerfen
fillna(value)Fehlende Werte mit einem angegebenen Wert füllen
isnull()Auf fehlende Werte prüfen, gibt ein boolesches DataFrame zurück
notnull()Auf nicht fehlende Werte prüfen, gibt ein boolesches DataFrame zurück
loc[]Daten nach Label-Index auswählen
iloc[]Daten nach Positionsindex auswählen
at[]Auf ein einzelnes Element in einem DataFrame zugreifen (mehrloc[]effizient)
iat[]Auf ein einzelnes Element in einem DataFrame zugreifen (mehriloc[]effizient)
apply(func)Eine Funktion auf ein DataFrame oder eine Series anwenden
applymap(func)Eine Funktion auf jedes Element eines DataFrame anwenden (nur für DataFrame)
groupby(by)Gruppierungsoperation, verwendet, um nach einer Spalte für zusammenfassende Statistiken zu gruppieren
pivot_table()Eine Pivot-Tabelle erstellen
merge()Mehrere DataFrames zusammenführen (ähnlich der SQL-JOIN-Operation)
concat()Mehrere DataFrames nach Zeilen oder Spalten verketten
to_csv()DataFrame in eine CSV-Datei exportieren
to_excel()DataFrame in eine Excel-Datei exportieren
to_json()DataFrame in das JSON-Format exportieren
to_sql()DataFrame in eine SQL-Datenbank exportieren
query()DataFrame mit SQL-ähnlicher Syntax abfragen
duplicated()Ein boolesches DataFrame zurückgeben, das angibt, ob jede Zeile ein Duplikat ist
drop_duplicates()Doppelte Zeilen entfernen
set_index()Den Index des DataFrame festlegen
reset_index()Den Index des DataFrame zurücksetzen
transpose()Das DataFrame transponieren (Zeilen und Spalten vertauschen)

Beispiel

import pandas as pd

# DataFrame erstellen
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [25, 30, 35, 40],
    'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)

# Die ersten beiden Datenzeilen anzeigen
print(df.head(2))

# Grundlegende Informationen zum DataFrame anzeigen
print(df.info())

# Deskriptive Statistiken abrufen
print(df.describe())

# Nach Alter sortieren
df_sorted = df.sort_values(by='Age', ascending=False)
print(df_sorted)

# Angegebene Spalten auswählen
print(df[['Name', 'Age']])

# Zeilen nach Index auswählen
print(df.iloc[1:3])  # Zeilen 2 bis 3 auswählen (nach Position)

# Zeilen nach Label auswählen
print(df.loc[1:2])  # Zeilen 2 bis 3 auswählen (nach Label)

# Gruppenstatistiken berechnen (nach Stadt gruppieren, Durchschnittsalter berechnen)
print(df.groupby('City')['Age'].mean())

# Fehlende Werte behandeln (fehlende Werte auffüllen)
df['Age'] = df['Age'].fillna(30)

# In CSV-Datei exportieren
df.to_csv('output.csv', index=False)

Die Ausgabe ist:

# 查看前两行数据
     Name  Age         City
0   Alice   25     New York
1     Bob   30  Los Angeles

# 查看 DataFrame 的基本信息
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   Name    4 non-null      object 
 1   Age     4 non-null      int64  
 2   City    4 non-null      object 
dtypes: int64(1), object(2)
memory usage: 148.0+ bytes

# 获取描述统计信息
             Age
count   4.000000
mean   32.500000
std     6.454972
min    25.000000
25%    27.500000
50%    32.500000
75%    37.500000
max    40.000000

# 按年龄排序
      Name  Age         City
3    David   40     Houston
2  Charlie   35      Chicago
1      Bob   30  Los Angeles
0    Alice   25     New York

# 按标签选择行
      Name  Age         City
1     Bob   30  Los Angeles
2  Charlie   35      Chicago

# 计算分组统计(按城市分组,计算平均年龄)
City
Chicago        35.0
Houston        40.0
Los Angeles    30.0
New York       25.0
Name: Age, dtype: float64

Weitere DataFrame-Details

Ein DataFrame erstellen

Aus Dictionary erstellen:Die Schlüssel des Dictionary werden zu Spaltennamen, und die Werte werden zu Spaltendaten.

Beispiel

import pandas as pd

# DataFrame aus einem Dictionary erstellen
df = pd.DataFrame({'Column1': [1, 2, 3], 'Column2': [4, 5, 6]})

Aus einer Liste von Listen erstellen:Die äußere Liste repräsentiert Zeilen, und die inneren Listen repräsentieren Spalten.

# DataFrame aus einer Liste von Listen erstellen

Beispiel

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]],
                  columns=['Column1', 'Column2', 'Column3'])

Aus einem NumPy-Array erstellen:Stellen Sie ein zweidimensionales NumPy-Array bereit.

Beispiel

import numpy as np

# DataFrame aus einem NumPy-Array erstellen
df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]))

DataFrame aus Series erstellen:Durchpd.Series()erstellen.

Beispiel

# DataFrame aus Series erstellen
s1 = pd.Series(['Alice', 'Bob', 'Charlie'])
s2 = pd.Series([25, 30, 35])
s3 = pd.Series(['New York', 'Los Angeles', 'Chicago'])
df = pd.DataFrame({'Name': s1, 'Age': s2, 'City': s3})

DataFrame-Eigenschaften und -Methoden

DataFrame-Objekte besitzen viele Attribute und Methoden für Datenmanipulation, Indexierung und Verarbeitung, wie z. B.: shape, columns, index, head(), tail(), info(), describe(), mean(), sum(), usw.

Beispiel

# Attribute und Methoden von DataFrame
print(df.shape)     # Form
print(df.columns)   # Spaltennamen
print(df.index)     # Index
print(df.head())    # Erste paar Datenzeilen, Standard sind die ersten 5 Zeilen
print(df.tail())    # Letzte paar Datenzeilen, Standard sind die letzten 5 Zeilen
print(df.info())    # Dateninformationen
print(df.describe())# Deskriptive Statistik
print(df.mean())    # Mittelwert berechnen
print(df.sum())     # Summe berechnen

Zugriff auf DataFrame-Elemente

Auf Spalten zugreifen:Verwende Spaltennamen als Attribute oder über.loc[]、.iloc[]zugreifen, und du kannst auch Label- oder Positionsindizierung verwenden.

Beispiel

# Zugriff über den Spaltennamen
print(df['Column1'])

# Zugriff über das Attribut
print(df.Name)    
   
# Zugriff über .loc[]
print(df.loc[:, 'Column1'])

# Zugriff über .iloc[]
print(df.iloc[:, 0])  # Angenommen, 'Column1' ist die erste Spalte

# Zugriff auf ein einzelnes Element
print(df['Name'][0])

Zugriff auf Zeilen:Verwenden Sie Zeilenbeschriftungen und den.loc[]Zugriff.

Beispiel

# Zugriff nach Zeilenbeschriftung
print(df.loc[0, 'Column1'])

Ändern eines DataFrame

Spaltendaten ändern:Weisen Sie den Spalten direkt Werte zu.

df['Column1'] = [10, 11, 12]

Neue Spalte hinzufügen:Weisen Sie der neuen Spalte Werte zu.

df['NewColumn'] = [100, 200, 300]

Neue Zeile hinzufügen:Verwenden Sie die Methoden loc, append oder concat.

Beispiel

# Neue Zeile für einen bestimmten Index mit loc hinzufügen
df.loc[3] = [13, 14, 15, 16]

# Neue Zeile am Ende mit append hinzufügen
new_row = {'Column1': 13, 'Column2': 14, 'NewColumn': 16}
df = df.append(new_row, ignore_index=True)

Hinweis:append()Die Methode wurde in pandas Version 1.4.0 als veraltet markiert und wird in zukünftigen Versionen entfernt. Die offizielle Empfehlung ist,concat()als alternative Methode zur Datenverkettung zu verwenden.

Die Methode concat() wird verwendet, um zwei oder mehr DataFrames zusammenzuführen. Wenn Sie einem anderen DataFrame eine Zeile hinzufügen möchten, können Sie die neue Zeile als neuen DataFrame behandeln und dann concat() verwenden:

Beispiel

# Eine neue Zeile mit concat hinzufügen
new_row = pd.DataFrame([[4, 7]], columns=['A', 'B'])  # Erstellen eines DataFrame, der nur die neue Zeile enthält
df = pd.concat([df, new_row], ignore_index=True)  # Die neue Zeile zum ursprünglichen DataFrame hinzufügen

print(df)

Löschen von DataFrame-Elementen

Spalten löschen:Verwenden Sie die Methode drop.

df_dropped = df.drop('Column1', axis=1)

Zeilen löschen:Verwenden Sie ebenfalls die Methode drop.

df_dropped = df.drop(0)  # 删除索引为 0 的行

Statistische Analyse von DataFrames

Deskriptive Statistik:Verwenden Sie.describe(), um die statistische Zusammenfassung numerischer Spalten anzuzeigen.

df.describe()

Statistiken berechnen:Verwenden Sie Aggregatfunktionen wie.sum()、.mean()、.max()usw.

df['Column1'].sum()
df.mean()

DataFrame-Indizierungsoperationen

Index zurücksetzen:Verwenden Sie.reset_index()。

df_reset = df.reset_index(drop=True)

Index festlegen:Verwenden Sie.set_index()。

df_set = df.set_index('Column1')

Boolesche Indizierung von DataFrames

Boolesche Ausdrücke verwenden: Den DataFrame anhand von Bedingungen filtern.

df[df['Column1'] > 2]

DataFrame-Datentypen

Datentypen anzeigen: Verwenden Sie das Attributdtypes.

df.dtypes

Datentypen konvertieren:Verwenden Sie die Methodeastype.

df['Column1'] = df['Column1'].astype('float64')

Zusammenführen und Aufteilen von DataFrames

Zusammenführen:Verwenden Sie die Methodeconcatodermerge.

# 纵向合并
pd.concat([df1, df2], ignore_index=True)

# 横向合并
pd.merge(df1, df2, on='Column1')

Aufteilen:Verwenden Siepivot, meltoder benutzerdefinierte Funktionen.

# 长格式转宽格式
df_pivot = df.pivot(index='Column1', columns='Column2', values='Column3')

# 宽格式转长格式
df_melt = df.melt(id_vars='Column1', value_vars=['Column2', 'Column3'])

Indizierung und Slicing

DataFrame unterstützt Indizierungs- und Slicing-Operationen für Zeilen und Spalten.

Beispiel

# Indizierung und Slicing
print(df[['Name', 'Age']])  # Mehrere Spalten extrahieren
print(df[1:3])               # Zeilen slicen
print(df.loc[:, 'Name'])     # Eine einzelne Spalte extrahieren
print(df.loc[1:2, ['Name', 'Age']])  # Angegebene Zeilen und Spalten durch Label-Indizierung extrahieren
print(df.iloc[:, 1:])        # Angegebene Spalten durch Positionsindizierung extrahieren

Hinweise

  • DataFrameEs ist eine flexible Datenstruktur, die Spalten unterschiedlicher Datentypen enthalten kann.
  • Spaltennamen und Zeilenindizes können Zeichenketten, Ganzzahlen usw. sein.
  • DataFrameDatenauswahl, Filterung, Modifikation und Analyse können auf viele Arten durchgeführt werden.
  • DurchDataFrameMit Operationen können Sie Datenbereinigung, Transformation, Analyse, Visualisierung und mehr durchführen.
Weitere Erweiterungen