Como embaralhar aleatoriamente linhas DataFrame em Pandas

  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

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

Artigo relacionado - Pandas DataFrame Row

  • Como Iterar Através de Linhas de um DataFrame em Pandas
  • Obter a Primeira Fila de Pandas de Dataframe