Como embaralhar aleatoriamente linhas DataFrame em Pandas

Suraj Joshi 30 janeiro 2023
  1. Método pandas.DataFrame.sample() para embaralhar linhas de DataFrame em Pandas
  2. numpy.random.permutation() para embaralhar Pandas DataFrame Rows
  3. sklearn.utils.shuffle() para Shuffle Pandas DataFrame Rows
Como embaralhar aleatoriamente linhas DataFrame em Pandas

Poderíamos utilizar o método sample() dos objetos Pandas DataFrame, permutation() função do módulo NumPy e shuffle() função do pacote sklearn para embaralhar aleatoriamente linhas DataFrame em Pandas.

Método pandas.DataFrame.sample() para embaralhar linhas de DataFrame em Pandas

pandas.DataFrame.sample() pode ser utilizado para retornar uma amostra aleatória de itens de um eixo do objeto DataFrame. Definimos o parâmetro axis como 0, pois precisamos amostrar elementos a partir de linhas, que é o valor padrão para o parâmetro axis.

O parâmetro frac determina que fração de instâncias totais precisa ser retornada. Se desejarmos embaralhar, definimos o valor de frac para 1.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13"]
fruits = ["Apple", "Papaya", "Banana", "Mango"]
prices = [3, 1, 2, 4]

df = pd.DataFrame({"Date": dates, "Fruit": fruits, "Price": prices})
print(df)

df_shuffled = df.sample(frac=1).reset_index(drop=True)
print(df_shuffled)

Resultado:

       Date   Fruit  Price
0  April-10   Apple      3
1  April-11  Papaya      1
2  April-12  Banana      2
3  April-13   Mango      4
       Date   Fruit  Price
3  April-13   Mango      4
2  April-12  Banana      2
0  April-10   Apple      3
1  April-11  Papaya      1

O método Dataframe.shuttle embaralha as linhas de Pandas DataFrame, como mostrado acima. Os índices das linhas DataFrame mantêm o mesmo valor dos índices iniciais.

Poderíamos adicionar o método reset_index() para zerar o índice DataFrame.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13"]
fruits = ["Apple", "Papaya", "Banana", "Mango"]
prices = [3, 1, 2, 4]

df = pd.DataFrame({"Date": dates, "Fruit": fruits, "Price": prices})
print(df)

df_shuffled = df.sample(frac=1).reset_index(drop=True)
print(df_shuffled)

Resultado:

       Date   Fruit  Price
0  April-10   Apple      3
1  April-11  Papaya      1
2  April-12  Banana      2
3  April-13   Mango      4
       Date   Fruit  Price
0  April-11  Papaya      1
1  April-13   Mango      4
2  April-10   Apple      3
3  April-12  Banana      2

Aqui, a opção drop=True evita que a coluna index seja adicionada como a nova coluna.

numpy.random.permutation() para embaralhar Pandas DataFrame Rows

Podemos utilizar numpy.random.permutation() para baralhar os índices da DataFrame. Quando os índices embaralhados são utilizados para selecionar linhas utilizando o método iloc(), obtemos linhas embaralhadas aleatoriamente.

import pandas as pd
import numpy as np

dates = ["April-10", "April-11", "April-12", "April-13"]
fruits = ["Apple", "Papaya", "Banana", "Mango"]
prices = [3, 1, 2, 4]

df = pd.DataFrame({"Date": dates, "Fruit": fruits, "Price": prices})

df_shuffled = df.iloc[np.random.permutation(df.index)].reset_index(drop=True)
print(df_shuffled)

Resultado:

       Date   Fruit  Price
0  April-13   Mango      4
1  April-12  Banana      2
2  April-10   Apple      3
3  April-11  Papaya      1

Você pode obter um resultado diferente ao executar o mesmo código. É porque a função np.random.permutation() gera diferentes permutações de números a cada vez.

sklearn.utils.shuffle() para Shuffle Pandas DataFrame Rows

Também podemos utilizar sklearn.utils.shuffle() para embaralhar as linhas de Pandas DataFrame.

import pandas as pd
import numpy as np
import sklearn

dates = ["April-10", "April-11", "April-12", "April-13"]
fruits = ["Apple", "Papaya", "Banana", "Mango"]
prices = [3, 1, 2, 4]

df = pd.DataFrame({"Date": dates, "Fruit": fruits, "Price": prices})

df_shuffled = sklearn.utils.shuffle(df)
print(df_shuffled)

Resultado:

       Date   Fruit  Price
3  April-13   Mango      4
0  April-10   Apple      3
1  April-11  Papaya      1
2  April-12  Banana      2

Se você não tiver o pacote sklearn instalado em seu computador, você pode simplesmente instalá-lo utilizando o script:

pip install -U scikit-learn
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Artigo relacionado - Pandas DataFrame Row