Skip to content

pandas : Mélange des lignes/éléments de DataFrame/Series

Vous pouvez mélanger au hasard des lignes de pandas.DataFrame et des éléments de pandas.Series avec la méthode sample(). Il existe d’autres façons de mélanger, mais l’utilisation de la méthode sample () est pratique car elle ne nécessite pas l’importation d’autres modules.

Cet article décrit le contenu suivant.

  • Spécifiez frac=1 pour sample() à mélanger
  • Réinitialiser l’index :ignore_index, reset_index()
  • Mettre à jour l’objet d’origine

Dans l’exemple de code, le fichier CSV suivant est utilisé.

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’exemple utilise pandas.DataFrame, mais vous pouvez mélanger pandas.Series de la même manière.

Notez que vous pouvez utiliser sort_values() et sort_index() pour trier les lignes en fonction des valeurs d’index ou de colonne. Voir l’article suivant.

Spécifiez frac=1 pour sample() à mélanger

Consultez l’article suivant pour plus de détails sur la méthode sample().

Si le paramètre frac est défini sur 1, toutes les lignes sont échantillonnées de manière aléatoire, ce qui équivaut à mélanger la ligne entière.

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

Vous pouvez initialiser le générateur de nombres aléatoires avec une graine fixe avec le paramètre random_state. Après initialisation avec la même graine, ils sont toujours mélangés de la même manière.

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

Réinitialiser l’index :ignore_index, reset_index()

Si vous souhaitez réindexer le résultat (0, 1, … , n-1), définissez le paramètre ignore_index sur 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

Le ignore_index a été ajouté dans pandas 1.3.0. Pour les versions antérieures, vous pouvez utiliser la méthode reset_index(). Définissez le paramètre drop sur True pour supprimer l’index d’origine.

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

Mettre à jour l’objet d’origine

Si vous souhaitez mettre à jour l’objet d’origine, affectez le résultat mélangé à l’objet d’origine et écrasez-le.

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