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)
,