我想创建交叉验证功能。我有包含数据的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
我在python中打开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]]
我如何分裂?
答案 0 :(得分:2)
您可以使用scikit-learn模块中的cross_validation函数,如下所示:
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