我正在尝试从this link读取计算机和互联网使用数据。2019年和2021年的数据集以.csv、.dta和.dat的形式提供,非常方便。然而,2019年之前的数据集在.dat文件中,并且在我查看nov21pub.csv文件中的一些列并将其与nov21pub.dat文件中的列进行比较时,间距和分隔符非常不一致。这些数据集在某些列中也有负数、NaN和不同的数字长度。是否可以使用Python或任何其他软件将.dat文件转换为.csv文件?
swvgeqrz1#
这是一个固定大小的格式。每个字段都有固定的字节数。这里,例如,第一字段具有大小5,第二字段具有大小2,第三字段具有大小10,.当一个值填满了它的所有大小时,它可能看起来像是融化了,但这并不重要,因为格式并不模糊。例如,对于那些尺寸为5、2、10(为了简单起见,我跳过了其余的部分)的文件,您可以使用行
4 2 123456789 12345 9 1234567 1234512 123456 12345121234567890
所以你可能会觉得第一行有3个数字,第三行有2个数字,最后一行有1个大数字。但事实并非如此。1号线是4,2,123456789;二线是12345,9,1234567;第三个是12345,12,123456(前5个字节是第一个数字,后2个字节是第二个数字);第4行包含12345,12,1234567890这就是你档案里的内容。特别是第二个字段(仅适用于2位数)。大多数情况下,它是1位数。但在某些行中,它是10,11,12,所以是两位数。这个文件甚至是一个“简单”的文件,因为除了那些字段1/2的融合,所有其他字段都可以用空格分隔(这就是为什么我把“简单”放在引号之间的原因)。事实上,这反而更难,因为它使人们更难理解它不仅仅是由空格分隔的数字,因为几乎所有的线都是这样。它以固定的大小编号,由空格填充)。至于实用问题(如何阅读):np.genfromtxt有一个delimiter字段。如果这个字符串是一个字符串,那么它就是分隔字段的东西。如果它是一个整数数组,那么它是一个字段大小的列表。在您的文件中,每行显然有163个字段。1,5个字节,第2个,2个字节,然后161个,每个10个字节。所以delimiter应该是一个数组[5,2,10,10,10,10...,10]。你可以这样构建[5,2]+[10]*161所以答案
np.genfromtxt
delimiter
[5,2,10,10,10,10...,10]
[5,2]+[10]*161
arr=np.genfromtxt('nov17rep.dat', delimiter=[5,2]+[10]*161, dtype=int)
1条答案
按热度按时间swvgeqrz1#
这是一个固定大小的格式。每个字段都有固定的字节数。
这里,例如,第一字段具有大小5,第二字段具有大小2,第三字段具有大小10,.
当一个值填满了它的所有大小时,它可能看起来像是融化了,但这并不重要,因为格式并不模糊。
例如,对于那些尺寸为5、2、10(为了简单起见,我跳过了其余的部分)的文件,您可以使用行
所以你可能会觉得第一行有3个数字,第三行有2个数字,最后一行有1个大数字。但事实并非如此。1号线是4,2,123456789;二线是12345,9,1234567;第三个是12345,12,123456(前5个字节是第一个数字,后2个字节是第二个数字);第4行包含12345,12,1234567890
这就是你档案里的内容。特别是第二个字段(仅适用于2位数)。大多数情况下,它是1位数。但在某些行中,它是10,11,12,所以是两位数。
这个文件甚至是一个“简单”的文件,因为除了那些字段1/2的融合,所有其他字段都可以用空格分隔(这就是为什么我把“简单”放在引号之间的原因)。事实上,这反而更难,因为它使人们更难理解它不仅仅是由空格分隔的数字,因为几乎所有的线都是这样。它以固定的大小编号,由空格填充)。
至于实用问题(如何阅读):
np.genfromtxt
有一个delimiter
字段。如果这个字符串是一个字符串,那么它就是分隔字段的东西。如果它是一个整数数组,那么它是一个字段大小的列表。在您的文件中,每行显然有163个字段。1,5个字节,第2个,2个字节,然后161个,每个10个字节。所以
delimiter
应该是一个数组[5,2,10,10,10,10...,10]
。你可以这样构建[5,2]+[10]*161
所以答案