我有一个包含非结构化数据的文本文件。该文件包含150k行,如
M Jackson 1 $
F Fiza 1 $
M Aaro 41 $
M Micheal 226 4 2 211 6 $
第一列是性别信息,第二列是名称,第三列可以有一个或多个由空格分隔的数字,代表该人可能属于的可能国家/地区。 (每个国家都有一个代码)。符号$是行尾。
我必须将数据输入到numpy数组中。当我将文本行扫描到数组时,它显示错误,因为它具有不相等的列。
data = np.loadtxt(filename, dtype= 'str', delimiter = ' ')
如何在这种情况下将数据扫描到数组中?空间也不是恒定的,但数字是由空格分隔的。 在我的数据的情况下,第一行有3个值,第4行有6列。稍后我将空列设为零,使其成为相同数量的列并进行特征提取。
答案 0 :(得分:1)
numpy加载器不能很好地处理丢失的数据。但是在genfromtxt
中,您可以指定字段宽度。
In [103]: txt = """one 2 3
...: two 4 5
...: """.splitlines()
In [105]: np.genfromtxt(txt, delimiter=[3,2,2,2])
Out[105]:
array([[nan, 2., 3., nan],
[nan, nan, 4., 5.]])
In [109]: np.genfromtxt(txt, delimiter=[3,2,2,2],dtype=str,encoding=None)
Out[109]:
array([['one', ' 2', ' 3', ''],
['two', ' ', ' 4', ' 5']], dtype='<U3')