Train Test Split для получения списка данных - Pandas

У меня есть список DataFrames, которые я хочу разделить на обучающие и тестовые наборы. Для одного DataFrame я мог бы сделать следующее,

Получить длину тестового разбиения

split_point = len(df)- 125

а потом,

train, test = df[0:split_point], df[split_point:]

Это дает мне разделение поезда и теста.

Теперь для списка DataFrames я мог бы получить длину тестового набора для каждого DataFrame, используя:

split_point = [len(df)-125 for df in dfs]  ## THIS WORKS FINE

Я хочу получить train а также test разделить на весь список фреймов данных, как я сделал для одного фрейма данных. Я попробовал следующее,

train, test = [(df[0:split_point], df[split_point:]) for df in dfs]

## AND THE FOLLOWING

train, test = [(df[0:split_point] for df in dfs),(df[split_point:]) for df in dfs]

Оба не работают. Как я могу это сделать?

(Некоторые длины DataFrame могут отличаться, но я не беспокоюсь об этом, так как это вычтет 125 из длины, которую я рассматриваю для тестового набора)

1 ответ

Решение

Вам нужно сделать

train, test = zip(*[(dfs[i][0:split_point[i]], dfs[i][split_point[i]:]) for i in range(len(dfs))])

Тогда каждый из них будет кортежем с соответствующими частями фреймов данных.

В приведенном выше коде я использую

split_point = [len(df)-125 for df in dfs]

Просто, чтобы сделать это более понятным, рассмотрим следующий более простой пример:

r = [(i,i**2) for i in range(5)]
a,b=zip(*r)

затем a является (0, 1, 2, 3, 4) а также b является (0, 1, 4, 9, 16),

Другие вопросы по тегам