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.