Cómo barajar aleatoriamente filas de DataFrame en Pandas

Suraj Joshi 30 enero 2023
  1. Método pandas.DataFrame.sample() para barajar filas de DataFrame en Pandas
  2. numpy.random.permutation() para mezclar filas de Pandas DataFrame
  3. sklearn.utils.shuffle() para mezclar filas de Pandas DataFrame
Cómo barajar aleatoriamente filas de DataFrame en Pandas

Podríamos usar el método sample() de los objetos Pandas DataFrame, la función permutation() del módulo NumPy y la función shuffle() del paquete sklearn para mezclar aleatoriamente las filas DataFrame en Pandas.

Método pandas.DataFrame.sample() para barajar filas de DataFrame en Pandas

pandas.DataFrame.sample() se puede usar para devolver una muestra aleatoria de elementos desde un eje del objeto DataFrame. Establecemos el parámetro axis en 0 ya que necesitamos muestrear elementos de fila, que es el valor predeterminado para el parámetro axis.

El parámetro frac determina qué fracción del total de instancias debe devolverse. Si deseamos barajar, establecemos el valor de frac en 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)

Producción :

       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

El método Dataframe.shuttle baraja filas de Pandas DataFrame, como se muestra arriba. Los índices de las filas de DataFrame se mantienen igual que los índices iniciales.

Podríamos agregar el método reset_index() para restablecer el índice del 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)

Producción :

       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

Aquí, la opción drop=True evita que la columna index se agregue como la nueva columna.

numpy.random.permutation() para mezclar filas de Pandas DataFrame

Podemos usar numpy.random.permutation() para barajar los índices de DataFrame. Cuando los índices barajados se utilizan para seleccionar filas utilizando el método iloc(), obtenemos filas aleatoriamente barajadas.

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)

Producción :

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

Es posible que obtenga un resultado diferente mientras ejecuta el mismo código. Esto se debe a que la función np.random.permutation() genera diferentes permutaciones de números cada vez.

sklearn.utils.shuffle() para mezclar filas de Pandas DataFrame

También podemos usar sklearn.utils.shuffle() para mezclar filas 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)

Producción :

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

Si no tiene instalado el paquete sklearn, simplemente puede instalarlo usando el script:

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

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

LinkedIn

Artículo relacionado - Pandas DataFrame Row