
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