Sie können Zeilen, Spalten und Elemente in pandas.DataFrame und pandas.Series auswählen und abrufen, indem Sie Operatoren (eckige Klammern) [] indizieren.
Dieser Artikel hat folgenden Inhalt.
- Wählen Sie Spalten von pandas.DataFrame aus
- [Spaltenname]: Holen Sie sich eine einzelne Spalte als Serie
- [Liste der Spaltennamen]: Holen Sie sich Einzelne oder mehrere Spalten als DataFrame
- Wählen Sie Zeilen von pandas.DataFrame aus
- [Slice of row name/number]: Holen Sie sich einzelne oder mehrere Zeilen als DataFrame
- [Boolean array/Series]: Holen Sie sich True-Zeilen als DataFrame
- Wählen Sie Elemente der pandas.Series aus
- [Label/Position]: Ruft den Wert eines einzelnen Elements ab
- [Liste der Labels/Positionen]: Holen Sie sich Einzelne oder mehrere Elemente als Serie
- [Slice of label/position]: Holen Sie sich Einzelne oder mehrere Elemente als Serie
- [Boolean array/Series]: Wahre Elemente als Serie erhalten
- Wählen Sie Elemente von pandas.DataFrame aus
- Beachten Sie, dass Zeilen- und Spaltennamen ganze Zahlen sind
Sie können Spalten auch nach Slice und Zeilen nach Name/Nummer oder deren Liste mit loc und iloc auswählen.
Die folgende CSV-Datei wird in diesem Beispielcode verwendet.
import pandas as pd
print(pd.__version__)
# 1.4.1
df = pd.read_csv('data/src/sample_pandas_normal.csv', index_col=0)
print(df)
# age state point
# name
# Alice 24 NY 64
# Bob 42 CA 92
# Charlie 18 CA 70
# Dave 68 TX 70
# Ellen 24 CA 88
# Frank 30 NY 57
Wählen Sie Spalten von pandas.DataFrame aus
[Spaltenname]: Holen Sie sich eine einzelne Spalte als pandas.Series
Sie können die Spalte als pandas.Series erhalten, indem Sie den Spaltennamen (Label) in [] angeben.
print(df['age'])
print(type(df['age']))
# name
# Alice 24
# Bob 42
# Charlie 18
# Dave 68
# Ellen 24
# Frank 30
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>
Sie können auch Spaltennamen als Attribut angeben, z. B… Beachten Sie, dass die Methode Vorrang hat, wenn der Spaltenname mit vorhandenen Methodennamen in Konflikt steht.
print(df.age)
print(type(df.age))
# name
# Alice 24
# Bob 42
# Charlie 18
# Dave 68
# Ellen 24
# Frank 30
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>
[Liste der Spaltennamen]: Holen Sie sich Einzelne oder mehrere Spalten als pandas.DataFrame
Sie können mehrere Spalten als pandas.DataFrame erhalten, indem Sie eine Liste von Spaltennamen in [] angeben. Die Spalten werden in der Reihenfolge der angegebenen Liste angeordnet.
print(df[['point', 'age']])
print(type(df[['point', 'age']]))
# point age
# name
# Alice 64 24
# Bob 92 42
# Charlie 70 18
# Dave 70 68
# Ellen 88 24
# Frank 57 30
# <class 'pandas.core.frame.DataFrame'>
Wenn Sie eine Liste mit einem Element angeben, wird eine einzelne Spalte pandas.DataFrame zurückgegeben, nicht pandas.Series.
print(df[['age']])
print(type(df[['age']]))
# age
# name
# Alice 24
# Bob 42
# Charlie 18
# Dave 68
# Ellen 24
# Frank 30
# <class 'pandas.core.frame.DataFrame'>
Sie können auch einen Teil des Spaltennamens mit loc oder eine Spaltennummer mit iloc angeben. Nichts finden Sie im folgenden Artikel.
print(df.loc[:, 'age':'state'])
print(type(df.loc[:, 'age':'state']))
# age state
# name
# Alice 24 NY
# Bob 42 CA
# Charlie 18 CA
# Dave 68 TX
# Ellen 24 CA
# Frank 30 NY
# <class 'pandas.core.frame.DataFrame'>
print(df.iloc[:, [2, 0]])
print(type(df.iloc[:, [2, 0]]))
# point age
# name
# Alice 64 24
# Bob 92 42
# Charlie 70 18
# Dave 70 68
# Ellen 88 24
# Frank 57 30
# <class 'pandas.core.frame.DataFrame'>
Wählen Sie Zeilen von pandas.DataFrame aus
[Slice of row name/number]: Holen Sie sich einzelne oder mehrere Zeilen als pandas.DataFrame
Sie können mehrere Zeilen als pandas.DataFrame erhalten, ohne dass Sie einen Slice in [] angeben.
print(df[1:4])
print(type(df[1:4]))
# age state point
# name
# Bob 42 CA 92
# Charlie 18 CA 70
# Dave 68 TX 70
# <class 'pandas.core.frame.DataFrame'>
Sie können einen negativen Wert und Schritt (start:stop:step) wie bei einem normalen Slice angeben. Sample can SIE Slices verwenden, um ungerade oder gerade Zeilen zu extrahieren.
print(df[:-3])
print(type(df[:-3]))
# age state point
# name
# Alice 24 NY 64
# Bob 42 CA 92
# Charlie 18 CA 70
# <class 'pandas.core.frame.DataFrame'>
print(df[::2])
print(type(df[::2]))
# age state point
# name
# Alice 24 NY 64
# Charlie 18 CA 70
# Ellen 24 CA 88
# <class 'pandas.core.frame.DataFrame'>
print(df[1::2])
print(type(df[1::2]))
# age state point
# name
# Bob 42 CA 92
# Dave 68 TX 70
# Frank 30 NY 57
# <class 'pandas.core.frame.DataFrame'>
Es WIRD Ein Fehler ausgelöst, WENN anstelle Eines Slice Nur Eine Zeilennummer angegeben WIRD.
# print(df[1])
# KeyError: 1
Wenn nur eine Zeile ausgewählt ist, wird pandas.DataFrame zurückgegeben, nicht pandas.Series.
print(df[1:2])
print(type(df[1:2]))
# age state point
# name
# Bob 42 CA 92
# <class 'pandas.core.frame.DataFrame'>
SIE can anstelle der Zeilennummer (Position) auch einen Zeilennamen (Label) angeben. Bei Einem Slice mit Zeilenname ist die Stop-Zeile enthalten.
print(df['Bob':'Ellen'])
print(type(df['Bob':'Ellen']))
# age state point
# name
# Bob 42 CA 92
# Charlie 18 CA 70
# Dave 68 TX 70
# Ellen 24 CA 88
# <class 'pandas.core.frame.DataFrame'>
Sie können den Zeilennamen/die Zeilennummer allein oder ihre Liste mit loc oder iloc angeben. Nichts finden Sie im folgenden Artikel.
print(df.loc['Bob'])
print(type(df.loc['Bob']))
# age 42
# state CA
# point 92
# Name: Bob, dtype: object
# <class 'pandas.core.series.Series'>
print(df.loc[['Bob', 'Ellen']])
print(type(df.loc[['Bob', 'Ellen']]))
# age state point
# name
# Bob 42 CA 92
# Ellen 24 CA 88
# <class 'pandas.core.frame.DataFrame'>
print(df.iloc[[1, 4]])
print(type(df.iloc[[1, 4]]))
# age state point
# name
# Bob 42 CA 92
# Ellen 24 CA 88
# <class 'pandas.core.frame.DataFrame'>
[Boolean array/Series]: Holen Sie sich True-Zeilen als pandas.DataFrame
Durch Angabe eines booleschen Arrays (list oder numpy.ndarray) in [] können SIE die True-Zeilen als pandas.DataFrame extrahieren.
l_bool = [True, False, False, True, True, False]
print(df[l_bool])
# age state point
# name
# Alice 24 NY 64
# Dave 68 TX 70
# Ellen 24 CA 88
Ein Fehler wird ausgelöst, wenn die Anzahl der Elemente nicht sichtbar ist.
# print(df[[True, False, False]])
# ValueError: Item wrong length 3 instead of 6.
Sie können auch den booleschen Wert pandas.Series angeben. Zeilen werden basierend auf Beschriftungen extrahiert, nicht auf der Grundlage der Reihenfolge.
s_bool = pd.Series(l_bool, index=reversed(df.index))
print(s_bool)
# Frank True
# Ellen False
# Dave False
# Charlie True
# Bob True
# Alice False
# dtype: bool
print(df[s_bool])
# age state point
# name
# Bob 42 CA 92
# Charlie 18 CA 70
# Frank 30 NY 57
Ein Fehler wird ausgelöst, wenn die Anzahl der Elemente oder Labels nicht gefunden wird.
s_bool_wrong = pd.Series(l_bool, index=['A', 'B', 'C', 'D', 'E', 'F'])
# print(df[s_bool_wrong])
# IndexingError: Unalignable boolean Series provided as indexer
# (index of the boolean Series and of the indexed object do not match).
Wählen Sie Elemente der pandas.Series aus
Verwenden Sie die folgenden Pandas.Series als Beispiel.
s = df['age']
print(s)
# name
# Alice 24
# Bob 42
# Charlie 18
# Dave 68
# Ellen 24
# Frank 30
# Name: age, dtype: int64
[Label/Position]: Ruft den Wert eines einzelnen Elements ab
Sie können den Wert des Elements erhalten, ohne dass Sie nur die Bezeichnung/Position (Index) angeben. Bei der Angabe nach Position (Index) kann ein negativer Wert used Werden, um die Position vom Ende her anzugeben. -1 ist der Schwanz.
Sie können den Labelnamen auch als Attribut angeben, z. B. .
print(s[3])
print(type(s[3]))
# 68
# <class 'numpy.int64'>
print(s['Dave'])
print(type(s['Dave']))
# 68
# <class 'numpy.int64'>
print(s[-1])
print(type(s[-1]))
# 30
# <class 'numpy.int64'>
print(s.Dave)
print(type(s.Dave))
# 68
# <class 'numpy.int64'>
[Liste der Labels/Positionen]: Holen Sie sich Einzelne oder mehrere Elemente als pandas.Series
Sie können mehrere Werte als pandas.Series auswählen, indem Sie eine Liste mit Labels/Positionen angeben. Die Elemente befinden sich in der Reihenfolge der angegebenen Liste.
print(s[[1, 3]])
print(type(s[[1, 3]]))
# name
# Bob 42
# Dave 68
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>
print(s[['Bob', 'Dave']])
print(type(s[['Bob', 'Dave']]))
# name
# Bob 42
# Dave 68
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>
Wenn eine Liste mit einem Element angegeben WIRD, WIRD pandas.Series zurückgegeben.
print(s[[1]])
print(type(s[[1]]))
# name
# Bob 42
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>
print(s[['Bob']])
print(type(s[['Bob']]))
# name
# Bob 42
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>
[Slice of label/position]: Holen Sie sich Einzelne oder mehrere Elemente als pandas.Series
Sie können auch mehrere Werte als pandas.Series auswählen, indem Sie einen Abschnitt der Beschriftung/Position angeben. Bei Einem Labelnamen ist das Stop-Element enthalten.
print(s[1:3])
print(type(s[1:3]))
# name
# Bob 42
# Charlie 18
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>
print(s['Bob':'Dave'])
print(type(s['Bob':'Dave']))
# name
# Bob 42
# Charlie 18
# Dave 68
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>
Wenn ein Element ausgewählt ist, wird pandas.Series zurückgegeben.
print(s[1:2])
print(type(s[1:2]))
# name
# Bob 42
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>
print(s['Bob':'Bob'])
print(type(s['Bob':'Bob']))
# name
# Bob 42
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>
[Boolean array/Series]: Holen Sie sich True-Elemente als pandas.Series
Durch Angabe eines booleschen Arrays (list oder numpy.ndarray) in [] can you the True-Elemente as pandas.Series extrahieren.
l_bool = [True, False, False, True, True, False]
print(s[l_bool])
# name
# Alice 24
# Dave 68
# Ellen 24
# Name: age, dtype: int64
Ein Fehler wird ausgelöst, wenn die Anzahl der Elemente nicht sichtbar ist.
# print(s[[True, False, False]])
# IndexError: Boolean index has wrong length: 3 instead of 6
Sie können auch den booleschen Wert pandas.Series angeben. Elemente werden basierend auf Labels extrahiert, nicht auf der Grundlage der Reihenfolge.
s_bool = pd.Series(l_bool, index=reversed(df.index))
print(s_bool)
# Frank True
# Ellen False
# Dave False
# Charlie True
# Bob True
# Alice False
# dtype: bool
print(s[s_bool])
# name
# Bob 42
# Charlie 18
# Frank 30
# Name: age, dtype: int64
Ein Fehler wird ausgelöst, wenn die Anzahl der Elemente oder Labels nicht gefunden wird.
s_bool_wrong = pd.Series(l_bool, index=['A', 'B', 'C', 'D', 'E', 'F'])
# print(s[s_bool_wrong])
# IndexingError: Unalignable boolean Series provided as indexer
# (index of the boolean Series and of the indexed object do not match).
Wählen Sie Elemente von pandas.DataFrame aus
Sie können den Wert eines Elements aus pandas.DataFrame abrufen, indem Sie pandas.Series aus pandas.DataFrame extrahieren und dann den Wert aus dieser pandas.Series abrufen.
print(df['age']['Alice'])
# 24
Sie können auch jede Gruppe nach Slices oder Listen extrahieren.
print(df['Bob':'Dave'][['age', 'point']])
# age point
# name
# Bob 42 92
# Charlie 18 70
# Dave 68 70
Dieser Weg ([…]] […]) WIRD jedoch als verkettete Indizierung bezeichnet und kann bei der Zuweisung von Werten zu Einer SettingWithCopyWarning führen.
Sie können Zeilen oder Spalten mit gleichzeitig at, iat, loc oder iloc auswählen.
print(df.at['Alice', 'age'])
# 24
print(df.loc['Bob':'Dave', ['age', 'point']])
# age point
# name
# Bob 42 92
# Charlie 18 70
# Dave 68 70
Beachten Sie, dass Zeilen- und Spaltennamen ganze Zahlen sind
Seien Sie vorsichtig, wenn Zeilen- und Spaltennamen Ganzzahlen sind.
Verwenden Sie den following pandas.DataFrame als Beispiel.
df = pd.DataFrame([[0, 10, 20], [30, 40, 50], [60, 70, 80]],
index=[2, 0, 1], columns=[1, 2, 0])
print(df)
# 1 2 0
# 2 0 10 20
# 0 30 40 50
# 1 60 70 80
Bei [Skalarwert] oder [Liste] WIRD der angegebene Wert als Spaltenname betrachtet.
print(df[0])
# 2 20
# 0 50
# 1 80
# Name: 0, dtype: int64
print(df[[0, 2]])
# 0 2
# 2 20 10
# 0 50 40
# 1 80 70
Bei [slice] WIRD der angegebene Wert als Zeilennummer und nicht als Zeilenname betrachtet. Auch negative Werte sind erlaubt.
print(df[:2])
# 1 2 0
# 2 0 10 20
# 0 30 40 50
print(df[-2:])
# 1 2 0
# 0 30 40 50
# 1 60 70 80
Verwenden Sie loc oder iloc, um eindeutig anzugeben, ob es sich um einen Namen (Label) oder eine Nummer (Position) handelt.
print(df.loc[:2])
# 1 2 0
# 2 0 10 20
print(df.iloc[:2])
# 1 2 0
# 2 0 10 20
# 0 30 40 50
Für Pandas.Serie:
s = df[2]
print(s)
# 2 10
# 0 40
# 1 70
# Name: 2, dtype: int64
In pandas.Series WIRD der angegebene Wert als Bezeichnung und nicht als Index betrachtet.
Use you at oder iat, um eindeutig anzugeben, ob es sich um ein Label oder einen Index handelt.
print(s.at[0])
# 40
print(s.iat[0])
# 10
Beachten Sie, dass, wenn SIE [-1] angeben, dies als Label mit dem Namen -1 betrachtet WIRD, nicht als Ende. Sie können iat verwenden.
# print(s[-1])
# KeyError: -1
print(s.iat[-1])
# 70
Daher ist es besser, at, iat, loc oder iloc zu verwenden, wenn der Zeilen- oder Spaltenname eine Ganzzahl ist.