
Vous pouvez obtenir un échantillon aléatoire de pandas.DataFrame et Series par la méthode sample(). Ceci est utile pour vérifier les données dans un grand pandas.DataFrame, Series.
Cet article décrit le contenu suivant.
- Comportement par défaut de sample()
- Lignes ou colonnes :
axis - Le nombre de lignes et de colonnes :
n - La fraction de lignes et de colonnes :
frac - La graine du générateur de nombres aléatoires :
random_state - Avec ou sans remplacement :
replace - Réinitialiser l’index :
ignore_index, reset_index()
Utilisez l’ensemble de données d’iris inclus comme échantillon dans Seaborn.
import pandas as pd
import seaborn as sns
df = sns.load_dataset("iris")
print(df.shape)
# (150, 5)
Les exemples suivants concernent pandas.DataFrame, mais pandas.Series a également sample(). L’utilisation est la même pour les deux.
Notez que vous pouvez vérifier pandas.DataFrame et Series de grande taille avec head() et tail(), qui renvoient les n premières/dernières lignes.
Comportement par défaut de sample()
Par défaut, une ligne est sélectionnée au hasard.
print(df.sample())
# sepal_length sepal_width petal_length petal_width species
# 133 6.3 2.8 5.1 1.5 virginica
Lignes ou colonnes :axis
Si le paramètre d’axe est défini sur 1, une colonne est extraite de manière aléatoire au lieu d’une ligne.
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]
Le nombre de lignes et de colonnes :n
Le nombre de lignes ou de colonnes à sélectionner peut être spécifié dans le paramètre 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 fraction de lignes et de colonnes :frac
La fraction de lignes et de colonnes à sélectionner peut être spécifiée dans le paramètre frac. frac=1 signifie 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
Vous ne pouvez pas spécifier n et frac en même temps.
# print(df.sample(n=3, frac=0.04))
# ValueError: Please enter a value for `frac` OR `n`, not both
La graine du générateur de nombres aléatoires :random_state
La graine du générateur de nombres aléatoires peut être spécifiée dans le paramètre random_state. Les mêmes lignes/colonnes sont renvoyées pour le même 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
Avec ou sans remplacement :replace
Si le paramètre de remplacement est défini sur True, les lignes et les colonnes sont échantillonnées avec remplacement. La même ligne/colonne peut être sélectionnée à plusieurs reprises.
La valeur par défaut de replace est False (échantillonnage sans remplacement).
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
Si replace=True, vous pouvez spécifier une valeur supérieure au nombre original de lignes/colonnes dans n ou une valeur supérieure à 1 dans 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
Réinitialiser l’index :ignore_index, reset_index()
Si vous souhaitez réindexer le résultat (0, 1, … , n-1), définissez le paramètre ignore_index de sample() sur 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
Le ignore_index a été ajouté dans pandas 1.3.0. Pour les versions antérieures, vous pouvez utiliser la méthode reset_index(). Définissez le paramètre drop sur True pour supprimer l’index d’origine.
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
