
Sie können eine Zufallsstichprobe von pandas.DataFrame und Series mit der Methode sample() erhalten. Dies ist nützlich, um Daten in einer großen pandas.DataFrame-Serie zu überprüfen.
Dieser Artikel hat folgenden Inhalt.
- Standardverhalten von sample()
- Zeilen oder Spalten:
axis
- Die Anzahl der Zeilen und Spalten:
n
- Der Bruchteil von Zeilen und Spalten:
frac
- Der Seed für den Zufallszahlengenerator:
random_state
- Mit oder ohne Ersatz:
replace
- Index zurücksetzen:
ignore_index, reset_index()
Verwenden Sie den Iris-Datensatz, der als Beispiel in Seaborn enthalten ist.
import pandas as pd
import seaborn as sns
df = sns.load_dataset("iris")
print(df.shape)
# (150, 5)
Die folgenden Beispiele gelten für pandas.DataFrame, aber pandas.Series hat auch sample(). Die Verwendung ist für beide gleich.
Beachten Sie, dass SIE große pandas.DataFrame und Serie mit head() und tail() überprüfen can, sterben sterben erste/letzten n Zeilen zurückgeben.
Standardverhalten von sample()
Standardmäßig wird eine zufällige Zeile ausgewählt.
print(df.sample())
# sepal_length sepal_width petal_length petal_width species
# 133 6.3 2.8 5.1 1.5 virginica
Zeilen oder Spalten:axis
Wenn der Achsenparameter auf 1 gesetzt IST, WIRD statt Einer Zeile zufällig eine Spalte ausgewählt.
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]
Die Anzahl der Zeilen und Spalten:n
Im Parameter n kann die Anzahl der zu selektierenden Zeilen oder Spalten angegeben werden.
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
Der Bruchteil von Zeilen und Spalten:frac
Der Anteil der zu selektierenden Zeilen und Spalten kann im Parameter frac angegeben werden. frac=1 bedeutet 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
Sie können n und frac nicht gleichzeitig angeben.
# print(df.sample(n=3, frac=0.04))
# ValueError: Please enter a value for `frac` OR `n`, not both
Der Seed für den Zufallszahlengenerator:random_state
Der Startwert für den Zufallszahlengenerator kann im Parameter random_state angegeben werden. Dieselben Zeilen/Spalten werden für den betrachteten random_state zurückgegeben.
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
Mit oder ohne Ersatz:replace
Wenn der Parameter replace auf True gesetzt ist, werden Zeilen und Spalten mit Ersetzung abgetastet. Dieselbe Zeile/Spalte kann wiederholt ausgewählt werden.
Der Standardwert für replace ist False (Sampling ohne Ersetzung).
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
If replace=True, can SIE einen Wert größer als die ursprüngliche Anzahl von Zeilen/Spalten in n oder einen Wert größer als 1 in frac angeben.
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
Index zurücksetzen:ignore_index, reset_index()
Wenn Sie das Ergebnis neu indizieren möchten (0, 1, … , n-1), setzen Sie den Parameter ignore_index von sample() auf 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
Derignore_index wurde in Pandas 1.3.0 hinzugefügt. Für frühere Versionen können Sie die Methode reset_index() verwenden. Setzen Sie den Drop-Parameter auf True, um den ursprünglichen Index zu löschen.
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