555 Stimmen

Wie erstelle ich Test- und Trainingsdatensätze aus einem DataFrame mit pandas?

Ich habe einen ziemlich großen Datensatz in Form eines Datenrahmens und frage mich, wie ich den Datenrahmen in zwei zufällige Stichproben (80% und 20%) für Training und Test aufteilen kann.

Vielen Dank!

965voto

o-90 Punkte 17105

Scikit Learns train_test_split ist gut. Es wird sowohl numpy arrays als auch dataframes aufteilen.

from sklearn.model_selection import train_test_split

train, test = train_test_split(df, test_size=0.2)

483voto

Andy Hayden Punkte 324102

Ich würde einfach randn von numpy verwenden:

In [11]: df = pd.DataFrame(np.random.randn(100, 2))

In [12]: msk = np.random.rand(len(df)) < 0.8

In [13]: train = df[msk]

In [14]: test = df[~msk]

Und nur um zu sehen, ob das funktioniert hat:

In [15]: len(test)
Out[15]: 21

In [16]: len(train)
Out[16]: 79

432voto

PagMax Punkte 8208

Pandas Zufallsauswahl funktioniert auch

train=df.sample(frac=0.8,random_state=200)
test=df.drop(train.index)

Für denselben random_state-Wert erhalten Sie immer die genau gleichen Daten im Trainings- und Testset. Dies bringt eine gewisse Wiederholbarkeit mit sich, während gleichzeitig Trainings- und Testdaten zufällig getrennt werden.

42voto

Napitupulu Jon Punkte 7643

Ich würde scikit-learns eigene train_test_split-Funktion verwenden und sie aus dem Index generieren

from sklearn.model_selection import train_test_split

y = df.pop('output')
X = df

X_train, X_test, y_train, y_test = train_test_split(X.index, y, test_size=0.2)
X.iloc[X_train] # gibt das DataFrame für das Training zurück

34voto

Nosey Punkte 724

Keine Notwendigkeit, in numpy zu konvertieren. Verwenden Sie einfach ein pandas df, um die Aufteilung durchzuführen, und es wird ein pandas df zurückgeben.

from sklearn.model_selection import train_test_split

train, test = train_test_split(df, test_size=0.2)

Und wenn Sie x von y trennen möchten

X_train, X_test, y_train, y_test = train_test_split(df[list_of_x_cols], df[y_col],test_size=0.2)

Und wenn Sie das gesamte df aufteilen möchten

X, y = df[list_of_x_cols], df[y_col]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X