列车测试拆分数据框列表 - 熊猫

时间:2017-07-19 21:05:09

标签: python pandas dataframe train-test-split

我有一个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

我希望得到整个数据帧列表的traintest拆分,就像我为单个数据帧所做的那样。我尝试了以下内容,

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 个答案:

答案 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)