
Sie können Zeilen und Spalten aus pandas.DataFrame entsprechend den Zeilen- und Spaltennamen (Index- und Spaltenbeschriftungen) mit der Methode filter() extrahieren.
Dieser Artikel hat folgenden Inhalt.
- Also verwenden Sie pandas.DataFrame.filter()
- Die zu filternde Achse:
axis
- Die zu filternde Achse:
- Genaue Übereinstimmung:
items
- Teilübereinstimmung:
like
- Regulärer Ausdruck:
regex
- Für Pandas.Serie
Im following Artikel FINDEN SIE sterben Grundlagen zum Auswählen von Zeilen und Spalten in Pandas.
Verwenden Sie den folgenden pandas.DataFrame.
import pandas as pd
print(pd.__version__)
# 1.2.2
df = pd.DataFrame([[0, 1, 2], [3, 4, 5], [6, 7, 8]],
index=['apple', 'banana', 'pineapple'],
columns=['A', 'B', 'C'])
print(df)
# A B C
# apple 0 1 2
# banana 3 4 5
# pineapple 6 7 8
Also verwenden Sie pandas.DataFrame.filter()
Die Methode filter() von pandas.DataFrame gibt eine Teilmenge entsprechend den Zeilen- und Spaltennamen zurück.
Sie können Bedingungen mit den Parametern items, like und regex angeben. Wenn diese Parameter gleichzeitig angegeben werden, WIRD ein Fehler ausgelöst. Die Details von jedem werden unten beschrieben.
print(df.filter(items=['A', 'C']))
# A C
# apple 0 2
# banana 3 5
# pineapple 6 8
# print(df.filter(items=['A', 'C'], like="A"))
# TypeError: Keyword arguments `items`, `like`, or `regex` are mutually exclusive
Wenn keine Zeile oder Spalte die Bedingung erfüllt ist, wird ein leerer pandas.DataFrame zurückgegeben.
print(df.filter(items=['X']))
# Empty DataFrame
# Columns: []
# Index: [apple, banana, pineapple]
Die zu filternde Achse:axis
Sie können die zu filternde Achse mit dem Parameter axis angeben. Zeilen werden nach 0 oder ‚Index‘ gefiltert, Spalten nach 1 oder Spalten.
print(df.filter(items=['apple', 'pineapple'], axis=0))
# A B C
# apple 0 1 2
# pineapple 6 7 8
print(df.filter(items=['apple', 'pineapple'], axis='index'))
# A B C
# apple 0 1 2
# pineapple 6 7 8
print(df.filter(items=['A', 'C'], axis=1))
# A C
# apple 0 2
# banana 3 5
# pineapple 6 8
print(df.filter(items=['A', 'C'], axis='columns'))
# A C
# apple 0 2
# banana 3 5
# pineapple 6 8
Wenn weggelassen, werden Spalten gefiltert.
print(df.filter(items=['A', 'C']))
# A C
# apple 0 2
# banana 3 5
# pineapple 6 8
Es ist nicht möglich, Zeilen und Spalten gleichzeitig zu filtern. Wenn Sie sowohl Zeilen als auch Spalten filtern möchten, wiederholen Sie filter().
print(df.filter(items=['A', 'C']).filter(items=['apple', 'pineapple'], axis=0))
# A C
# apple 0 2
# pineapple 6 8
Genaue Übereinstimmung:items
Sie können Zeilen/Spalten extrahieren, deren Namen (Labels) genau übereinstimmen, ohne dass SIE eine Liste für den Parameter-Elemente angeben. Die Reihenfolge der Zeilen und Spalten des Ergebnisses ist die Reihenfolge der angegebenen Liste.
print(df.filter(items=['A', 'C']))
# A C
# apple 0 2
# banana 3 5
# pineapple 6 8
print(df.filter(items=['C', 'A']))
# C A
# apple 2 0
# banana 5 3
# pineapple 8 6
Sie können dasselbe tun, indem Sie eine Liste von Labels mit [] oder loc[] angeben.
print(df[['C', 'A']])
# C A
# apple 2 0
# banana 5 3
# pineapple 8 6
print(df.loc[:, ['C', 'A']])
# C A
# apple 2 0
# banana 5 3
# pineapple 8 6
print(df.loc[['pineapple', 'apple']])
# A B C
# pineapple 6 7 8
# apple 0 1 2
Teilübereinstimmung:like
Sie können Zeilen/Spalten extrahieren, deren Namen (Labels) teilweise übereinstimmen, indem Sie eine Zeichenfolge für den Like-Parameter angeben.
print(df.filter(like='apple', axis=0))
# A B C
# apple 0 1 2
# pineapple 6 7 8
Zeilen und Spalten mit Like in Label == True werden extrahiert.
Um mehrere Bedingungen anzugeben, verwenden SIE den unten beschriebenen regulären Ausdruck.
Regulärer Ausdruck:regex
SIE can Zeilen/Spalten extrahieren, indem SIE ihre Namen (Labels) mit regulären Ausdrücken auswählen, indem SIE das reguläre Ausdrucksmuster für den Regex-Parameter angeben.
Siehe die offizielle Dokumentation für Sonderzeichen in regulären Ausdrücken.
Zeilen extrahieren, deren Namen mit ‚e‘ enden.
print(df.filter(regex='e$', axis=0))
# A B C
# apple 0 1 2
# pineapple 6 7 8
Zeilen extrahieren, deren Namen mit ‚a‘ oder ‚b‘ beginnen.
print(df.filter(regex='^(a|b)', axis=0))
# A B C
# apple 0 1 2
# banana 3 4 5
Zeilen extrahieren, deren Namen ’na‘ oder ’ne‘ enthalten.
print(df.filter(regex='(na|ne)', axis=0))
# A B C
# banana 3 4 5
# pineapple 6 7 8
Für Pandas.Serie
Serie hat auch eine filter() Methode. Seine Verwendung ist die gleiche wie pandas.DataFrame.
s = pd.Series([0, 1, 2], index=['apple', 'banana', 'pineapple'])
print(s)
# apple 0
# banana 1
# pineapple 2
# dtype: int64
print(s.filter(items=['pineapple', 'banana']))
# pineapple 2
# banana 1
# dtype: int64
print(s.filter(like='apple'))
# apple 0
# pineapple 2
# dtype: int64
print(s.filter(regex='^(a|b)'))
# apple 0
# banana 1
# dtype: int64