我有一个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,我正在考虑测试集)
答案 0 :(得分: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)
。