Это то, что я написал, когда мне нужно было разделить DataFrame. Я рассмотрел использование подхода Энди выше, но мне не понравилось, что я не мог точно контролировать размер наборов данных (т. Е. Иногда было бы 79, иногда 81 и т. Д.).
def make_sets(data_df, test_portion):
import random as rnd
tot_ix = range(len(data_df))
test_ix = sort(rnd.sample(tot_ix, int(test_portion * len(data_df))))
train_ix = list(set(tot_ix) ^ set(test_ix))
test_df = data_df.ix[test_ix]
train_df = data_df.ix[train_ix]
return train_df, test_df
train_df, test_df = make_sets(data_df, 0.2)
test_df.head()