Data Manipulation

Эффективная перетасовка фреймов данных Pandas

Spread the love

Случайная перестановка строк в 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 для воспроизводимых результатов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *