修改train_test_split函数

3

我可以使用train_test_split()函数将数据集按索引值进行分割,将每10行作为训练数据,其余行作为测试数据,而不是传递test_sizerandom_state参数吗?


1
你的问题不够清楚,请您提供更多细节。 - H.Bukhari
1
我知道在sklearn库下的train_test_split()函数可以根据test_size参数将数据集分为训练数据和测试数据。如果test_size为0.2,则会按照80:20的比例划分数据集。但是,如果我想将数据集中每10行作为训练数据,其余行作为测试数据,该怎么做呢? - Rachael E
1个回答

2

好的,请尝试使用::n,它将返回您指定的每个第n项,以下是示例:

df=pd.DataFrame({'number': np.arange(100), })

如果我们想每隔10个获取一次值:
print(df[::10])

结果:

    number
0        0
10      10
20      20
30      30
40      40
50      50
60      60
70      70
80      80
90      90

你可以使用numpy数组完成同样的操作:

np.arange(100)

array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
       34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
       51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
       68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
       85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])

每9个值:

np.arange(100)[::9]

输出:

array([ 0,  9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99])

edit:

def getting_train_val(dataframe, interval=10):
    x_valid = dataframe[::interval]
    x_test = dataframe[~ dataframe(dataframe[::interval])].dropna()
    return x_valid, x_test

2
谢谢您的评论。我认为使用train_test_split函数无法完成此操作。使用df [:: 10]可以获得训练数据集。但是,如何将其余行放入测试数据集中呢? - Rachael E
2
好的,它有效了!感谢您的帮助! :) 我刚刚意识到使用以下代码就能达到同样的目的:for index, row in df.iterrows(): X_train = df[(df.index) % 5 != 0] - Rachael E
1
太棒了!!=) 祝编程愉快! - H.Bukhari
@RachaelE 请接受H.Bukhari的答案作为您的解决方案,以便其他人可以看到问题已解决。谢谢! - petezurich
1
@petezurich 已接受 :) - Rachael E

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接