Skip to content

pandas: Estrarre righe/colonne da DataFrame in base alle etichette

Python

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
  • 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