0

我有一个要拆分为训练集和测试集的 DataFrame 列表。对于单个 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,我正在考虑将其用于测试集)

4

1 回答 1

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)

于 2017-07-19T21:08:44.967 回答