DataFrame.sample — случайная выборка строк в pandas

DataFrame.sample возвращает случайное подмножество строк — по числу (n) или по доле (frac). Пригодится для быстрого взгляда на случайный срез, формирования train/test, бутстрэпа и даунсэмплинга больших таблиц. С random_state выборка становится воспроизводимой.

Синтаксис

DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None)

Примеры использования

Пример 1: n строк с фиксированным seed

df.sample(n=2, random_state=42)[['order_id', 'channel']]

Результат:

   order_id channel
3      1004   email
1      1002    paid

Пример 2: Доля строк через frac

df.sample(frac=0.5, random_state=1).shape

Результат:

(2, 6)

Пример 3: Бутстрэп с возвращением

df.sample(n=3, replace=True, random_state=7)['order_id'].tolist()

Результат:

[1004, 1001, 1004]
Порешать Python-задачи в тренажёре →

Типичная ошибка

Нельзя одновременно задать n и frac. Для выборки больше исходного размера (frac>1 или n>len) нужен replace=True. weights не должны быть отрицательными и нормируются автоматически. Индекс исходных строк сохраняется — часто после этого нужен reset_index(drop=True). Для воспроизводимости фиксируйте random_state.

Где спрашивают на собеседовании

Используют для быстрого просмотра случайного среза, разбиения train/test, бутстрэпа и даунсэмплинга больших таблиц. Спрашивают про random_state (воспроизводимость) и weights (взвешенная/стратифицированная выборка).

FAQ: частые вопросы про sample

Как сделать выборку воспроизводимой?

Зафиксируйте random_state (целое число или np.random.Generator): df.sample(n=100, random_state=42). При одинаковом seed и неизменных данных результат будет тем же. Без него каждый вызов даёт новую случайную выборку.

n или frac — что выбрать?

n задаёт точное число строк, frac — долю (0.1 = 10%). Передать оба сразу нельзя. Для выборки больше исходного размера (frac>1 или n>len) обязателен replace=True — сэмплинг с возвращением.

Как сделать взвешенную или стратифицированную выборку?

Параметр weights принимает имя колонки или массив неотрицательных весов — вероятность строки пропорциональна весу. Для стратификации по группам применяют df.groupby('channel').sample(frac=0.1) — сэмпл берётся внутри каждой группы отдельно.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы Python

Pandas: основы · NumPy векторизация

Другие функции pandas

groupby · merge · pivot_table · apply · value_counts · drop_duplicates

Открыть Python-тренажёр (556 задач) →