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!

5voto

Makio Punkte 465

Wählen Sie einfach den Zeilenbereich aus dem df wie folgt aus

row_count = df.shape[0]
split_point = int(row_count*1/5)
test_data, train_data = df[:split_point], df[split_point:]

4voto

elyte5star Punkte 127
shuffle = np.random.permutation(len(df))
test_size = int(len(df) * 0.2)
test_aux = shuffle[:test_size]
train_aux = shuffle[test_size:]
TRAIN_DF =df.iloc[train_aux]
TEST_DF = df.iloc[test_aux]

4voto

MikeL Punkte 5063

Wenn Sie Ihre Daten entsprechend der Spaltenbeschriftung in Ihrem Datensatz aufteilen müssen, können Sie dies verwenden:

def split_to_train_test(df, label_column, train_frac=0.8):
    train_df, test_df = pd.DataFrame(), pd.DataFrame()
    labels = df[label_column].unique()
    for lbl in labels:
        lbl_df = df[df[label_column] == lbl]
        lbl_train_df = lbl_df.sample(frac=train_frac)
        lbl_test_df = lbl_df.drop(lbl_train_df.index)
        print '\n%s:\n---------\ntotal:%d\ntrain_df:%d\ntest_df:%d' % (lbl, len(lbl_df), len(lbl_train_df), len(lbl_test_df))
        train_df = train_df.append(lbl_train_df)
        test_df = test_df.append(lbl_test_df)

    return train_df, test_df

und verwenden Sie es:

train, test = split_to_train_test(data, 'class', 0.7)

Sie können auch random_state übergeben, wenn Sie die Zufälligkeit der Aufteilung kontrollieren möchten oder einen globalen Zufallsseed verwenden möchten.

4voto

AHonarmand Punkte 490

Um in mehr als zwei Klassen wie Zug, Test und Validierung aufzuteilen, kann man Folgendes tun:

probs = np.random.rand(len(df))
training_mask = probs < 0.7
test_mask = (probs>=0.7) & (probs < 0.85)
validatoin_mask = probs >= 0.85

df_training = df[training_mask]
df_test = df[test_mask]
df_validation = df[validatoin_mask]

Dadurch werden etwa 70% der Daten im Training, 15% im Test und 15% in der Validierung platziert.

3voto

Pardhu Gopalam Punkte 179
import pandas as pd

from sklearn.model_selection import train_test_split

datafile_name = 'Pfad_zur_Daten_Datei'

data = pd.read_csv(datafile_name)

target_attribute = data['Spaltenname']

X_train, X_test, y_train, y_test = train_test_split(data, target_attribute, test_size=0.8)

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