Случайная перестановка строк в DataFrame Pandas — частая операция в data science, критически важная для задач, таких как создание обучающих и тестовых наборов данных, случайная выборка или просто рандомизация данных для анализа. В этой статье рассматриваются три эффективных метода для достижения этого, выделяя их сильные и слабые стороны.
Оглавление
Метод Pandas sample()
Метод Pandas sample()
предлагает удобный подход к перестановке строк DataFrame. Установив параметр frac
равным 1, вы получаете полностью рандомизированный порядок исходного DataFrame.
import pandas as pd
# Пример DataFrame
data = {'col1': [1, 2, 3, 4, 5], 'col2': ['A', 'B', 'C', 'D', 'E']}
df = pd.DataFrame(data)
# Перемешивание с помощью sample()
shuffled_df = df.sample(frac=1, random_state=42) # random_state для воспроизводимости
print("Исходный DataFrame:n", df)
print("nПеремешанный DataFrame:n", shuffled_df)
Аргумент random_state
важен для воспроизводимости. Указание целого числа гарантирует согласованную перестановку при многократном выполнении. Пропуск этого аргумента приведет к различной перестановке каждый раз.
Функция NumPy permutation()
Функция NumPy permutation()
генерирует случайную перестановку индексов. Этот подход, как правило, быстрее, чем sample()
, особенно для больших DataFrame, поскольку он работает непосредственно с массивами NumPy, которые более эффективны.
import pandas as pd
import numpy as np
# Пример DataFrame
data = {'col1': [1, 2, 3, 4, 5], 'col2': ['A', 'B', 'C', 'D', 'E']}
df = pd.DataFrame(data)
# Перемешивание с помощью numpy.random.permutation()
shuffled_indices = np.random.permutation(len(df))
shuffled_df = df.iloc[shuffled_indices]
print("Исходный DataFrame:n", df)
print("nПеремешанный DataFrame:n", shuffled_df)
Для воспроизводимых результатов используйте np.random.seed(42)
перед вызовом np.random.permutation()
.
Функция Scikit-learn shuffle()
Функция Scikit-learn shuffle()
особенно полезна при перемешивании DataFrame вместе со связанным массивом (например, метками в настройках контролируемого обучения). Она гарантирует, что DataFrame и массив остаются синхронизированными после перемешивания.
import pandas as pd
from sklearn.utils import shuffle
# Пример DataFrame
data = {'col1': [1, 2, 3, 4, 5], 'col2': ['A', 'B', 'C', 'D', 'E']}
df = pd.DataFrame(data)
# Перемешивание DataFrame и отдельного массива (при необходимости)
shuffled_df, _ = shuffle(df, random_state=42) # подчеркивание игнорирует второе возвращаемое значение
print("Исходный DataFrame:n", df)
print("nПеремешанный DataFrame:n", shuffled_df)
Как и в предыдущих методах, random_state
управляет воспроизводимостью. Подчеркивание _
отбрасывает второе возвращаемое значение (которое было бы перемешанным массивом, если бы он был предоставлен).
Заключение: Каждый метод эффективно перемешивает строки DataFrame. Pandas sample()
является наиболее интуитивным, в то время как permutation()
NumPy часто обеспечивает лучшую производительность для больших наборов данных. shuffle()
Scikit-learn идеально подходит для одновременного перемешивания DataFrame и соответствующего массива. Выберите метод, наиболее подходящий для ваших нужд, и всегда используйте random_state
для воспроизводимых результатов.