Skip to content

pandas: Mescolare righe/elementi di DataFrame/Series

Python

Puoi combinare in modo casuale righe di pandas.DataFrame ed elementi di pandas.Series con il metodo sample(). Ci sono altri modi per mescolare, ma usare il metodo sample() è conveniente perché non richiede l’importazione di altri moduli.

In questo articolo vengono descritti i seguenti contenuti.

  • Specificare frac=1 per campione() da mescolare
  • Indice di ripristino:ignore_index, reset_index()
  • Aggiorna oggetto originale

Nel codice di esempio utilizzatore viene il seguente file CSV.

import pandas as pd

df = pd.read_csv('data/src/sample_pandas_normal.csv')
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

L’esempio usa pandas.DataFrame, ma puoi mescolare pandas.Series allo stesso modo.

Tieni presente che puoi utilizzare sort_values() e sort_index() per ordinare le righe in base ai valori dell’indice o della colonna. Vedi il seguente articolo.

Specificare frac=1 per campione() da mescolare

Vedere il seguente articolo per i dettagli del metodo sample().

Se il parametro frac è impostato su 1, tutte le righe vengono campionate casualmente, equivalente a mescolare l’intera riga.

print(df.sample(frac=1))
#       name  age state  point
# 2  Charlie   18    CA     70
# 1      Bob   42    CA     92
# 3     Dave   68    TX     70
# 0    Alice   24    NY     64
# 5    Frank   30    NY     57
# 4    Ellen   24    CA     88

Puoi inizializzare il generatore di numeri casuali con un seme fisso con il parametro random_state. Dopo l’inizializzazione con lo stesso seme, vengono sempre mescolati allo stesso modo.

print(df.sample(frac=1, random_state=0))
#       name  age state  point
# 5    Frank   30    NY     57
# 2  Charlie   18    CA     70
# 1      Bob   42    CA     92
# 3     Dave   68    TX     70
# 0    Alice   24    NY     64
# 4    Ellen   24    CA     88

print(df.sample(frac=1, random_state=0))
#       name  age state  point
# 5    Frank   30    NY     57
# 2  Charlie   18    CA     70
# 1      Bob   42    CA     92
# 3     Dave   68    TX     70
# 0    Alice   24    NY     64
# 4    Ellen   24    CA     88

Indice di ripristino:ignore_index, reset_index()

Se vuoi reindicizzare il risultato (0, 1, … , n-1), imposta il parametro ignore_index su True.

print(df.sample(frac=1, ignore_index=True))
#       name  age state  point
# 0    Ellen   24    CA     88
# 1    Frank   30    NY     57
# 2      Bob   42    CA     92
# 3     Dave   68    TX     70
# 4    Alice   24    NY     64
# 5  Charlie   18    CA     70

L’ignore_index è stato aggiunto in Pandas 1.3.0. Per le versioni precedenti, puoi utilizzare il metodo reset_index(). Impostare il parametro drop su True per eliminare l’indice originale.

print(df.sample(frac=1).reset_index(drop=True))
#       name  age state  point
# 0      Bob   42    CA     92
# 1     Dave   68    TX     70
# 2    Alice   24    NY     64
# 3  Charlie   18    CA     70
# 4    Frank   30    NY     57
# 5    Ellen   24    CA     88

Aggiorna oggetto originale

Se vuoi aggiornare l’oggetto originale, assegna il risultato mescolato all’oggetto originale e sovrascrivilo.

df = df.sample(frac=1)
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 5    Frank   30    NY     57
# 1      Bob   42    CA     92
# 4    Ellen   24    CA     88
# 3     Dave   68    TX     70
# 2  Charlie   18    CA     70