Data Manipulation

Embaralhando DataFrames Pandas Eficientemente

Spread the love

Embaralhar aleatoriamente as linhas de um DataFrame Pandas é uma operação frequente em ciência de dados, crucial para tarefas como criar conjuntos de dados de treinamento e teste, amostragem aleatória ou simplesmente randomizar dados para análise. Este artigo explora três métodos eficientes para alcançar isso, destacando seus pontos fortes e fracos.

Sumário

Método Pandas sample()

O método Pandas sample() oferece uma abordagem amigável para embaralhar linhas de DataFrame. Ao definir o parâmetro frac como 1, você obtém uma ordem completamente aleatorizada do DataFrame original.


import pandas as pd

# DataFrame de exemplo
data = {'col1': [1, 2, 3, 4, 5], 'col2': ['A', 'B', 'C', 'D', 'E']}
df = pd.DataFrame(data)

# Embaralhar usando sample()
shuffled_df = df.sample(frac=1, random_state=42)  # random_state para reprodutibilidade

print("DataFrame Original:n", df)
print("nDataFrame Embaralhado:n", shuffled_df)

O argumento random_state é vital para a reprodutibilidade. Especificar um inteiro garante um embaralhamento consistente em várias execuções. Omitir resultará em embaralhamentos diferentes a cada vez.

Função NumPy permutation()

A função NumPy permutation() gera uma permutação aleatória de índices. Esta abordagem é geralmente mais rápida que sample(), especialmente para DataFrames grandes, pois opera diretamente em arrays NumPy, que são mais eficientes.


import pandas as pd
import numpy as np

# DataFrame de exemplo
data = {'col1': [1, 2, 3, 4, 5], 'col2': ['A', 'B', 'C', 'D', 'E']}
df = pd.DataFrame(data)

# Embaralhar usando numpy.random.permutation()
shuffled_indices = np.random.permutation(len(df))
shuffled_df = df.iloc[shuffled_indices]

print("DataFrame Original:n", df)
print("nDataFrame Embaralhado:n", shuffled_df)

Para resultados reprodutíveis, use np.random.seed(42) antes de chamar np.random.permutation().

Função Scikit-learn shuffle()

A função Scikit-learn shuffle() é particularmente benéfica ao embaralhar um DataFrame juntamente com um array relacionado (por exemplo, rótulos em uma configuração de aprendizado supervisionado). Isso garante que o DataFrame e o array permaneçam sincronizados após o embaralhamento.


import pandas as pd
from sklearn.utils import shuffle

# DataFrame de exemplo
data = {'col1': [1, 2, 3, 4, 5], 'col2': ['A', 'B', 'C', 'D', 'E']}
df = pd.DataFrame(data)

# Embaralhar DataFrame e um array separado (se necessário)
shuffled_df, _ = shuffle(df, random_state=42)  # o underline ignora o segundo valor retornado

print("DataFrame Original:n", df)
print("nDataFrame Embaralhado:n", shuffled_df)

Como os métodos anteriores, random_state controla a reprodutibilidade. O underline _ descarta o segundo valor retornado (que seria um array embaralhado se um fosse fornecido).

Conclusão: Cada método embaralha efetivamente as linhas do DataFrame. Pandas sample() é o mais intuitivo, enquanto permutation() do NumPy muitas vezes oferece desempenho superior para conjuntos de dados maiores. shuffle() do Scikit-learn é ideal para o embaralhamento simultâneo de um DataFrame e um array correspondente. Selecione o método mais adequado às suas necessidades e sempre utilize random_state para resultados reprodutíveis.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *