Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中拆分巨大的文本数据集?_Python_Python 3.x_Machine Learning_Dataset - Fatal编程技术网

如何在python中拆分巨大的文本数据集?

如何在python中拆分巨大的文本数据集?,python,python-3.x,machine-learning,dataset,Python,Python 3.x,Machine Learning,Dataset,我的机器学习项目的第一部分是将庞大的数据集分成3部分,然后将它们用作训练数据集和测试数据集。此数据集包含1000万行,如下所示: 上图是我的数据集的截图。我不想更改列或行的顺序,因此随机数在这里不起作用。如您所见,它们是由一个选项卡分隔的6列,包含1000万行。我想把这些行分成3个独立的部分,第一个3333.333行是我的数据集1,第二个3333.333行是数据集2,其余是数据集3。因此,3个不同的文本文件的组成部分(列)的顺序没有改变。 我正在使用Spyder3,在您的帮助下我编写了以下代码

我的机器学习项目的第一部分是将庞大的数据集分成3部分,然后将它们用作训练数据集和测试数据集。此数据集包含1000万行,如下所示:

上图是我的数据集的截图。我不想更改列或行的顺序,因此随机数在这里不起作用。如您所见,它们是由一个选项卡分隔的6列,包含1000万行。我想把这些行分成3个独立的部分,第一个3333.333行是我的数据集1,第二个3333.333行是数据集2,其余是数据集3。因此,3个不同的文本文件的组成部分(列)的顺序没有改变。 我正在使用Spyder3,在您的帮助下我编写了以下代码:

f = open ( 'pr_data.txt' , 'r')  """Reading File"""

l = [ map(float,line.strip().split()) for line in f ]

no_samples = len(l)

data1 = l[0:int(no_samples/3)][:]

data2 = l[int(no_samples/3):int(no_samples*2/3)][:]

data3 = l[int(no_samples*2/3):no_samples][:]

file = open('data1.txt','w')
for row in data1: 
    file.writelines(["%s\t" % item for item in row]) 
    file.writelines("\n") 
file.close()

file = open('data2.txt','w')
for row in data2: 
    file.writelines(["%s\t" % item for item in row]) 
    file.writelines("\n") 
file.close()

file = open('data3.txt','w')
for row in data3: 
    file.writelines(["%s\t" % item for item in row]) 
    file.writelines("\n") 
file.close()
通过上述代码,3文本文件在同一目录中创建,但问题是:数字的精度发生了变化。例如,0和1更改为0.0和1.0。此外,其中一些不在同一列中。请参见下面的data1第一行的屏幕截图:


请告诉我如何更正我的代码?

打印需要普通括号->() 将代码更改为:

print(data.read())
如果将数据作为字符串处理(在本例中是这样),则应首先使用
data.split(“\n”)
在每一新行拆分数据。这将返回包含每一行的列表

编辑: 现在,您可以对该列表进行切片,以获得3个单独的列表:

data1 = lines[0:1/3*len(lines)]
data2 = lines[1/3*len(lines):2/3*len(lines)]
data3 = lines[2/3*len(lines):len(lines)]

打印需要普通方括号->() 将代码更改为:

print(data.read())
如果将数据作为字符串处理(在本例中是这样),则应首先使用
data.split(“\n”)
在每一新行拆分数据。这将返回包含每一行的列表

编辑: 现在,您可以对该列表进行切片,以获得3个单独的列表:

data1 = lines[0:1/3*len(lines)]
data2 = lines[1/3*len(lines):2/3*len(lines)]
data3 = lines[2/3*len(lines):len(lines)]

因此,方法如下:

  • 打开文件

  • 在逐行读取文件时,使用split()方法拆分每一行。此外,在拆分时,还可以将获得的字符串转换为float

  • 现在您将整个文件作为float类型的多维数组

  • 获取样本数(行)

  • 使用切片存储第一个数据中从0到行/3的行,数据2中从行/3到行*2/3的行,以及数据3中剩余的行

  • f=open('input.txt','r')
    l=[f中的行的映射(float,line.strip().split())
    无样品=长度(l)
    数据1=l[0:int(无样本/3)][:]
    数据2=l[int(无样本/3):int(无样本*2/3)][:]
    data3=l[int(无样本*2/3):无样本][:]
    //将多维列表写入文件
    文件=打开('data1.txt','w')
    对于data1中的行:
    file.writelines([%s\t”%item for item in row])
    file.writelines(“\n”)
    
    file.close()
    ,因此方法如下:

  • 打开文件

  • 在逐行读取文件时,使用split()方法拆分每一行。此外,在拆分时,还可以将获得的字符串转换为float

  • 现在您将整个文件作为float类型的多维数组

  • 获取样本数(行)

  • 使用切片存储第一个数据中从0到行/3的行,数据2中从行/3到行*2/3的行,以及数据3中剩余的行

  • f=open('input.txt','r')
    l=[f中的行的映射(float,line.strip().split())
    无样品=长度(l)
    数据1=l[0:int(无样本/3)][:]
    数据2=l[int(无样本/3):int(无样本*2/3)][:]
    data3=l[int(无样本*2/3):无样本][:]
    //将多维列表写入文件
    文件=打开('data1.txt','w')
    对于data1中的行:
    file.writelines([%s\t”%item for item in row])
    file.writelines(“\n”)
    

    file.close()
    要如何分割文件?随机拆分?另外,与一起使用时不需要关闭文件。谢谢您的回答。不,不是随机的。正如您在我的数据集的屏幕截图中所看到的,它们是由一个选项卡分隔的6列,包括1000万行。我想把这些行分成3个独立的部分,第一个3333.333行是我的数据集1,第二个3333.333行是数据集2,其余是数据集3。因此,3个不同的文本文件的组成部分(列)顺序没有改变。不要忘记将
    后面的行缩进…
    请查看编辑后的问题,并将data1的屏幕截图与原始数据集的屏幕截图进行比较。您想如何分割该文件?随机拆分?另外,与一起使用时不需要关闭文件。谢谢您的回答。不,不是随机的。正如您在我的数据集的屏幕截图中所看到的,它们是由一个选项卡分隔的6列,包括1000万行。我想把这些行分成3个独立的部分,第一个3333.333行是我的数据集1,第二个3333.333行是数据集2,其余是数据集3。因此,3个不同的文本文件不会改变组件(列)的顺序。不要忘了将
    后面的行缩进…
    请查看编辑的问题,并将data1的屏幕截图与原始数据集的屏幕截图进行比较。感谢您的快速回答。我更正了它,但是当我执行打印代码时,我得到了这个错误:“NameError:name'data'未定义”您是否更改了代码中的其他内容<代码>数据应存在于带有块的
    中。拆分后,它们将成为我的训练和测试数据集。我应该应用离散贝叶斯规则,熵,决策规则,量化。。。在那上面。所以这些行不是字符串,我应该找到每列中每个数字的概率。但第一步是将它们划分为3个独立的数据集,我使用python实现了这一点。如果windows比Python更简单,请告诉我。我编辑了答案。如果现在要将列表转换回字符串,只需调用
    “\n”.join(data1)
    。这将在每个e之间创建一个带“\n”的字符串