2015-12-14 51 views
-2

我想創建交叉驗證函數。我有一個包含數據的csv文件:在python中拆分CSV數據

c1,c2,c3,c4 
0.1,y,1,n 
0.4,n,1,n 
0.3,y,2,n 
0.6,y,1,y 

我打開蟒蛇CSV數據,我想分割數據成爲2個數據,所以這樣的結果。

c1,c2,c3 
0.1,y,1 
0.6,y,1 

c1,c2,c3 
0.4,n,1 
0.3,y,2 

在CSV模塊有什麼功能可以做到這一點?

[編輯]

我的代碼:

def split(path_to_file): 
    reader = csv.reader(file(path_to_file)) 
    split_1=[] 
    split_2=[] 
    for line in reader: 
     split_1.append(line[:-1]) 
     split_2.append(line[:-1]) 

    print split_1 
    print split_2 

問題:

split_1.append(line[:-1]) 

該代碼將返回數據不包括C4,但它顯示的所有數據。

[[c1,c2,c3],[0.1,y,1],[0.4,n,1],[0.3,y,2],[0.6,y,1]] 

我如何分割它?

+5

你如何確定哪些數據在哪裏? –

+0

@Altoyr我編輯的問題,包括我的代碼。 – dionajie

+0

關鍵問題是,就像@DirkHorsten已經問過的那樣,你如何*想要分割數據?目前,您剛從csv文件中讀取數據並將其存儲在兩個列表中。 – Ogaday

回答

2

您可以使用一個cross_validation函數從scikit學習模塊是這樣的:

import sklearn 

c1_train, c1_test, c2_train, c2_test = sklearn.cross_validation.train_test_split(c1, c2, test_size=0.5, random_state=0) 
c3_train, c3_test, c4_train, c4_test = sklearn.cross_validation.train_test_split(c3, c4, test_size=0.5, random_state=0) 

如果你想有一個50-50分你的代碼,你可以做到這一點更新:

import csv 

def split(path_to_file): 
    reader = csv.reader(file(path_to_file)) 

    split_1 = [] 
    split_2 = [] 
    i = 0 
    for line in reader: 
    if i == 0: 
     split_1.append(line[:-1]) 
     split_2.append(line[:-1]) 
    elif i % 2 == 0: 
     split_1.append(line[:-1]) 
    else: 
     split_2.append(line[:-1])  
    i = i + 1 

    print split_1 
    print split_2 
+0

謝謝。但我不允許使用sklearn模塊或其他。 – dionajie