在python中拆分CSV数据

时间:2015-12-14 08:03:57

标签: python csv

我想创建交叉验证功能。我有包含数据的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]]

我如何分裂?

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