Skip to content

Pandas: Zeilen/Elemente von DataFrame/Series mischen

Python

Sie können Reihen von pandas.DataFrame und Elemente von pandas.Series mit der Methode sample() zufällig mischen. Es gibt andere Möglichkeiten zum Mischen, aber die Verwendung der sample()-Methode ist praktisch, da es nicht erforderlich ist, andere Module zu importieren.

Dieser Artikel hat folgenden Inhalt.

  • Geben Sie frac=1 an, damit sample() gemischt wird
  • Index zurücksetzen:ignore_index, reset_index()
  • Ursprüngliches Objekt aktualisieren

Im Beispielcode WIRD sterben folgende CSV-Datei verwendet.

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

Das Beispiel used pandas.DataFrame, aber SIE can pandas.Series auf sterben same Weise mischen.

Beachten Sie, dass Sie sort_values() und sort_index() verwenden können, um Zeilen nach Index- oder Spaltenwerten zu sortieren. Siehe folgenden Artikel.

Geben Sie frac=1 an, damit sample() gemischt wird

Notebooks zur Methode sample() finden Sie im following Artikel.

If der frac-Parameter auf 1 gesetzt IST, Werden alle Zeilen zufällig abgetastet, was dem Mischen der gesamten Zeile entspricht.

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

Sie können den Zufallszahlengenerator mit einem festen Startwert mit dem Parameter random_state initialisieren. Nach der Initialisierung mit demselben Seed werden sie immer auf dieselbe Weise gemischt.

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

Index zurücksetzen:ignore_index, reset_index()

Wenn Sie das Ergebnis neu indizieren möchten (0, 1, … , n-1), setzen Sie den Parameter ignore_index auf 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

Derignore_index wurde in Pandas 1.3.0 hinzugefügt. Für frühere Versionen können Sie die Methode reset_index() verwenden. Setzen Sie den Drop-Parameter auf True, um den ursprünglichen Index zu löschen.

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

Ursprüngliches Objekt aktualisieren

Wenn SIE das ursprüngliche Objekt aktualisieren möchten, weisen SIE das gemischte Ergebnis dem ursprünglichen Objekt zu und überschreiben Sie es.

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