
Puoi ottenere un campione casuale da pandas.DataFrame e Series con il metodo sample(). Questo è utile per controllare i dati in un pandas.DataFrame, Series di grandi dimensioni.
In questo articolo vengono descritti i seguenti contenuti.
- Comportamento predefinito di campione()
- Righe o colonne:
axis
- Il numero di righe e colonne:
n
- La frazione di righe e colonne:
frac
- Il seme per il generatore di numeri casuali:
random_state
- Con o senza sostituire:
replace
- Indice di ripristino:
ignore_index, reset_index()
Usa il set di dati dell’iride incluso come campione in Seaborn.
import pandas as pd
import seaborn as sns
df = sns.load_dataset("iris")
print(df.shape)
# (150, 5)
Gli esempi seguenti sono per pandas.DataFrame, ma pandas.Series ha anche sample(). L’utilizzo è lo stesso per entrambi.
Nota che puoi controllare pandas.DataFrame e Series di grandi dimensioni con head() e tail(), che restituiscono la prima/ultima n righe.
Comportamento predefinito di campione()
Per impostazione predefinita, una riga viene selezionata in modo casuale.
print(df.sample())
# sepal_length sepal_width petal_length petal_width species
# 133 6.3 2.8 5.1 1.5 virginica
Righe o colonne:axis
Se il parametro dell’asse è impostato su 1, viene es casualmente una colonna anziché una riga.
print(df.sample(axis=1))
# petal_width
# 0 0.2
# 1 0.2
# 2 0.2
# 3 0.2
# 4 0.2
# .. ...
# 145 2.3
# 146 1.9
# 147 2.0
# 148 2.3
# 149 1.8
#
# [150 rows x 1 columns]
Il numero di righe e colonne:n
Il numero di righe da selezionare può essere specificato nel parametro n.
print(df.sample(n=3))
# sepal_length sepal_width petal_length petal_width species
# 29 4.7 3.2 1.6 0.2 setosa
# 67 5.8 2.7 4.1 1.0 versicolor
# 18 5.7 3.8 1.7 0.3 setosa
La frazione di righe e colonne:frac
La frazione di righe e colonne da selezionare può essere specificata nel parametro frac. frac=1 significa 100%.
print(df.sample(frac=0.04))
# sepal_length sepal_width petal_length petal_width species
# 15 5.7 4.4 1.5 0.4 setosa
# 66 5.6 3.0 4.5 1.5 versicolor
# 131 7.9 3.8 6.4 2.0 virginica
# 64 5.6 2.9 3.6 1.3 versicolor
# 81 5.5 2.4 3.7 1.0 versicolor
# 137 6.4 3.1 5.5 1.8 virginica
Non è possibile specificare ne frac contemporaneamente.
# print(df.sample(n=3, frac=0.04))
# ValueError: Please enter a value for `frac` OR `n`, not both
Il seme per il generatore di numeri casuali:random_state
Il seme per il generatore di numeri casuali può essere specificato nel parametro random_state. Le stesse righe/colonne vengono restituite per lo stesso random_state.
print(df.sample(n=3, random_state=0))
# sepal_length sepal_width petal_length petal_width species
# 114 5.8 2.8 5.1 2.4 virginica
# 62 6.0 2.2 4.0 1.0 versicolor
# 33 5.5 4.2 1.4 0.2 setosa
print(df.sample(n=3, random_state=0))
# sepal_length sepal_width petal_length petal_width species
# 114 5.8 2.8 5.1 2.4 virginica
# 62 6.0 2.2 4.0 1.0 versicolor
# 33 5.5 4.2 1.4 0.2 setosa
Con o senza sostituire:replace
Se il parametro di esecuzione è e le colonne impostate vengono te con la sostituzione. La stessa riga/colonna può essere selezionata più volte.
Il valore predefinito per la sostituzione è falso (campionamento senza sostituzione).
print(df.head(3))
# sepal_length sepal_width petal_length petal_width species
# 0 5.1 3.5 1.4 0.2 setosa
# 1 4.9 3.0 1.4 0.2 setosa
# 2 4.7 3.2 1.3 0.2 setosa
print(df.head(3).sample(n=3, replace=True))
# sepal_length sepal_width petal_length petal_width species
# 0 5.1 3.5 1.4 0.2 setosa
# 0 5.1 3.5 1.4 0.2 setosa
# 2 4.7 3.2 1.3 0.2 setosa
Se sostituire=True, puoi specificare un valore maggiore del numero di righe/colonne in no un valore maggiore di 1 in frac.
print(df.head(3).sample(n=5, replace=True))
# sepal_length sepal_width petal_length petal_width species
# 1 4.9 3.0 1.4 0.2 setosa
# 2 4.7 3.2 1.3 0.2 setosa
# 0 5.1 3.5 1.4 0.2 setosa
# 0 5.1 3.5 1.4 0.2 setosa
# 1 4.9 3.0 1.4 0.2 setosa
print(df.head(3).sample(frac=2, replace=True))
# sepal_length sepal_width petal_length petal_width species
# 2 4.7 3.2 1.3 0.2 setosa
# 1 4.9 3.0 1.4 0.2 setosa
# 2 4.7 3.2 1.3 0.2 setosa
# 2 4.7 3.2 1.3 0.2 setosa
# 0 5.1 3.5 1.4 0.2 setosa
# 2 4.7 3.2 1.3 0.2 setosa
Indice di ripristino:ignore_index, reset_index()
Se vuoi reindicizzare il risultato (0, 1, … , n-1), imposta il parametro ignore_index di sample() su True.
print(df.sample(n=3, ignore_index=True))
# sepal_length sepal_width petal_length petal_width species
# 0 5.2 2.7 3.9 1.4 versicolor
# 1 6.3 2.5 4.9 1.5 versicolor
# 2 5.7 3.0 4.2 1.2 versicolor
L’ignore_index è stato aggiunto in Pandas 1.3.0. Per le versioni precedenti, puoi utilizzare il metodo reset_index(). Impostare il parametro drop su True per eliminare l’indice originale.
print(df.sample(n=3).reset_index(drop=True))
# sepal_length sepal_width petal_length petal_width species
# 0 4.9 3.1 1.5 0.2 setosa
# 1 7.9 3.8 6.4 2.0 virginica
# 2 6.3 2.8 5.1 1.5 virginica