
Puoi estrarre righe e colonne da pandas.DataFrame in base ai nomi di riga e colonna (etichette di indice e colonne) con il metodo filter().
In questo articolo vengono descritti i seguenti contenuti.
- Vieni a usare pandas.DataFrame.filter()
- L’asse su cui filtrare:
axis
- L’asse su cui filtrare:
- Corrispondenza esatta:
items
- Partita parziale:
like
- Espressione regolare:
regex
- Per panda.Serie
Vedere il seguente articolo per le nozioni di base sulla selezione di righe e colonne nei panda.
Usa i seguenti 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
Vieni a usare pandas.DataFrame.filter()
Il metodo filter() di pandas.DataFrame restituisce un sottoinsieme in base ai nomi di riga e colonna.
Puoi specificare le condizioni con i parametri item, like e regex. Se questi parametri vengono specificati contemporaneamente, viene generato un errore. I dettagli di ciascuno sono descritti di seguito.
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
Se nessuna riga o colonna soddisfa la condizione, viene restituito un pandas.DataFrame vuoto.
print(df.filter(items=['X']))
# Empty DataFrame
# Columns: []
# Index: [apple, banana, pineapple]
L’asse su cui filtrare:axis
È possibile specificare l’asse su cui filtrare con il parametro asse. Le righe vengono filtrate per 0 o ‘indice’, le colonne per 1 o colonne.
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
Se omesso, le colonne vengono filtrate.
print(df.filter(items=['A', 'C']))
# A C
# apple 0 2
# banana 3 5
# pineapple 6 8
Non è possibile filtrare righe e colonne contemporaneamente. Se vuoi filtrare sia le righe che le colonne, ripeti filter().
print(df.filter(items=['A', 'C']).filter(items=['apple', 'pineapple'], axis=0))
# A C
# apple 0 2
# pineapple 6 8
Corrispondenza esatta:items
È possibile estrarre righe/colonne i cui nomi (etichette) devono specificare esattamente un elenco per il parametro voci. L’ordine delle righe e delle colonne del risultato corrisponde all’ordine dell’elenco specificato.
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
Puoi fare lo stesso specificando un elenco di etichette con [] o loc[].
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
Partita parziale:like
È possibile estrarre righe/colonne i cui nomi (etichette) numero specificando una stringa per il parametro come.
print(df.filter(like='apple', axis=0))
# A B C
# apple 0 1 2
# pineapple 6 7 8
Vengono estratte righe e colonne con come in etichetta == Vero.
Per specificare più condizioni, utilizzare l’espressione regolare descritta di seguito.
Espressione regolare:regex
Puoi estrarre righe/colonne selezionando i loro nomi (etichette) con espressioni regolari specificando il modello di espressione regolare per il parametro regex.
Consulta la documentazione ufficiale per i caratteri speciali nelle regolari espressioni.
Estrarre le righe i cui nomi terminano con ‘e’.
print(df.filter(regex='e$', axis=0))
# A B C
# apple 0 1 2
# pineapple 6 7 8
Estrarre le righe i cui nomi iniziano con ‘a’ o ‘b’.
print(df.filter(regex='^(a|b)', axis=0))
# A B C
# apple 0 1 2
# banana 3 4 5
Estrarre le righe i cui nomi contengono ‘na’ o ‘ne’.
print(df.filter(regex='(na|ne)', axis=0))
# A B C
# banana 3 4 5
# pineapple 6 7 8
Per panda.Serie
La serie ha anche un metodo filter(). Il suo utilizzo è lo stesso di 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