Коротко
sample(n=3)— 3 случайные строки,sample(frac=0.1)— 10 % строк.random_state=число— воспроизводимый результат; без него каждый вызов разный.sample(frac=1)перемешивает все строки;ignore_index=True— заодно новый индекс.replace=True— с повторами (бутстреп);weights— вероятность строки пропорциональна весу.- Без
replaceнельзя взять больше строк, чем есть в таблице.
Синтаксис
df.sample(n=None, frac=None, replace=False, weights=None,
random_state=None, axis=0, ignore_index=False)Параметры
ПараметрЧто делаетПо умолчанию
nсколько строк; нельзя вместе с frac1fracдоля строк; с replace=True может быть больше 1Nonereplaceразрешить повторыFalseweightsвеса строк: имя столбца или SeriesNonerandom_stateseed или генератор np.random.GeneratorNoneignore_indexновый индекс 0, 1, 2…FalseПримеры
customers = pd.DataFrame({
"name": ["Аня", "Борис", "Вика", "Глеб", "Дина", "Егор", "Женя", "Зоя"],
"orders": [12, 3, 7, 1, 20, 5, 9, 2],
})customers.sample(n=3, random_state=42) # 3 случайные строкиВывод
name orders 1 Борис 3 5 Егор 5 0 Аня 12
customers.sample(frac=0.5, random_state=1) # половина строкВывод
name orders 7 Зоя 2 2 Вика 7 1 Борис 3 6 Женя 9
customers.sample(frac=1, random_state=7, ignore_index=True) # перемешать все строкиВывод
name orders 0 Вика 7 1 Егор 5 2 Аня 12 3 Женя 9 4 Глеб 1 5 Борис 3 6 Дина 20 7 Зоя 2
customers.sample(n=10, replace=True, random_state=3)["name"].value_counts() # с повторамиВывод
name Аня 4 Глеб 2 Егор 2 Вика 1 Борис 1 Name: count, dtype: int64
customers.sample(n=200, weights="orders", replace=True, random_state=5)["name"].value_counts().head(3) # чаще всех — у кого больше заказовВывод
name Дина 64 Аня 37 Женя 30 Name: count, dtype: int64
a = customers.sample(n=2, random_state=10)["name"].tolist()
b = customers.sample(n=2, random_state=10)["name"].tolist()
a, bВывод
(['Вика', 'Глеб'], ['Вика', 'Глеб'])
Подводные камни
Больше строк, чем есть
customers.sample(n=20) # без replace больше строк, чем есть, не взятьОшибка
ValueError: Cannot take a larger sample than population when 'replace=False'