Как перемешать строки Pandas Dataframe в Python
Last updated
Last updated
В этом руководстве вы научитесь перемешивать строки в Dataframe Pandas, используя Python. Вы узнаете, как перемешивать ваш Dataframe Pandas, используя метод sample
из Pandas, метод shuffle
из sklearn, а также метод permutation
из Numpy. Вы также узнаете, почему часто бывает полезно перемешивать данные, как перемешать данные и иметь возможность воссоздавать результаты. Наконец, вы узнаете, какой из методов является самым быстрым.
Перемешивание DataFrame в Pandas — задача, которую часто стоит выполнить перед обучением любой модели машинного обучения. Поскольку наши данные часто отсортированы определенным образом (например, по дате или географической области), мы хотим убедиться, что наши данные представительны. Поэтому мы перемешиваем DataFrame в Pandas перед моделированием.
Поскольку наши модели машинного обучения часто основываются на меньшей выборке данных, мы хотим удостовериться, что выбранные данные представляют истинное распределение наших данных.
Краткий ответ: Используйте метод .sample
из Pandas для перемешивания вашего DataFrame
Оглавление
В блоке кода ниже представлено несколько строк на Python для генерации примера Pandas Dataframe. Если хотите следовать за этим туториалом шаг за шагом, не стесняйтесь скопировать код ниже, сохраняя порядок. Вы также можете использовать свой собственный Dataframe, но результаты, конечно, будут отличаться от тех, что указаны в туториале.
Мы видим, что наш датафрейм содержит четыре столбца: два со строками и два с числовыми значениями.
Один из самых простых способов перемешать Dataframe в Pandas — использовать метод sample
. Метод df.sample
позволяет делать выборку строк в Dataframe в случайном порядке. Благодаря этому, мы можем просто указать, что хотим вернуть весь Dataframe, в случайном порядке.
Чтобы сделать это, мы применяем метод sample
к нашему датафрейму и указываем методу вернуть весь датафрейм, передав аргумент frac=1
. Это указывает Pandas вернуть 100% датафрейма
Давайте попробуем это в Pandas:
При применении метода .sample()
видно, что данные в DataFrame были перемешаны в случайном порядке. Однако, видим, что исходные значения индекса сохранены. Мы можем сбросить наш индекс, используя метод Pandas .reset_index()
, который сбрасывает наш индекс так, чтобы он был отсортирован с 0 и далее. Давайте посмотрим, как это выглядит:
В следующем разделе вы узнаете, как перемешать DataFrame в Pandas с помощью sample
, сохраняя возможность воспроизводить ваши результаты
Одним из важных аспектов науки о данных является возможность воспроизводить свои результаты. Когда вы применяете метод sample
к датафрейму, он каждый раз возвращает заново перемешанный датафрейм.
Мы можем воспроизвести наши результаты, передав значение в аргумент random_state=
. Просто передайте целое число, и перемешанный датафрейм будет одинаковым каждый раз.
Почему использовать random_state
? Возможность воспроизводить свои результаты – полезное умение в машинном обучении для лучшего понимания вашего рабочего процесса. Это особенно полезно, когда другие проверяют и воспроизводят ваши результаты. Также это очень помогает в правильной отладке вашего кода.
Давайте посмотрим, как это работает:
При повторном запуске этого кода мы теперь получаем тот же результат
Еще один полезный способ рандомизации DataFrame в Pandas заключается в использовании библиотеки машинного обучения sklearn
. Одним из основных преимуществ этого подхода является возможность легко интегрировать его в ваши sklearn-пайплайны, что позволяет создавать простые потоки данных.
Sklearn поставляется с методом shuffle
, который мы можем применить к нашему датафрейму. Давайте посмотрим:
Аналогично методу .sample
из Pandas, если мы хотим воспроизвести наши результаты, мы можем использовать параметр random_state=
. Давайте посмотрим, как это выглядит:
В заключительном разделе ниже вы узнаете, как использовать библиотеку numpy для рандомизации вашего Pandas dataframe
random.permutation
NumpyВ этом последнем разделе вы узнаете, как использовать NumPy для рандомизации DataFrame в Pandas. NumPy предлагает функцию random.permutation()
, которая позволяет нам сгенерировать случайную перестановку массива.
Чтобы перемешать наш датафрейм, мы можем передать индексы датафрейма в функцию, которая случайным образом меняет их порядок. Мы затем используем аксессор .iloc
, чтобы переупорядочить наши данные. Давайте посмотрим, как это выглядит:
Возможно, вы задаетесь вопросом, какой метод выбрать. Я бы порекомендовал выбрать тот метод, который лучше всего вписывается в ваш рабочий процесс. Например, если вы строите конвейер анализа данных с помощью sklearn, вы можете встроить перемешивание в ваш конвейер, используя утилиту shuffle
из sklearn.
Еще одним важным фактором может быть скорость – какой метод будет стабильно давать самые быстрые результаты.
Чтобы получить приведенные ниже результаты, мы тысячу раз перемешали Pandas DataFrame, содержащий 1 500 000 записей. Среднее значение каждого запуска было вычислено, что позволило получить надежный результат:
df.sample()
18.3 µs ± 255 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
np.utils.permutation()
17.9 µs ± 122 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
sklearn.utils.shuffle()
17.9 µs ± 5.53 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Результаты довольно близки! Если оптимальная скорость не является вашей главной целью, вы можете спокойно выбрать любой из методов. Тем не менее, вам всё равно придётся импортировать Pandas. Импортирование пакетов, которые вы не используете, может добавить дополнительные задержки в ваш скрипт.
В этом уроке вы узнали, как перемешать Dataframe в Pandas, используя метод sample
. Метод позволяет случайным образом выбирать строки. Чтобы перемешать наш dataframe, мы просто выбираем весь dataframe. Мы даже можем воспроизвести перемешанный dataframe, используя параметр random_state=
.
Вы также научились использовать библиотеки sklearn
и numpy
для перемешивания вашего датафрейма, что дает вам еще больше гибкости в том, как вы получаете результаты. Например, использование sklearn
позволяет легко интегрировать этот шаг в конвейеры машинного обучения.
Чтобы узнать больше о методах, рассмотренных в этом руководстве, ознакомьтесь с официальной документацией:
Чтобы узнать больше о связанном контенте, ознакомьтесь со следующими статьями:
Pandas Quantile: вычисление процентилей в Dataframe
Функция ранжирования Pandas: ранжирование данных Dataframe (эквивалент SQL row_number)
Дисперсия Pandas: расчет дисперсии столбца Pandas Dataframe