加载具有不相等列的文本文件

时间:2018-03-26 16:18:44

标签: python-3.x file numpy text

我有一个包含非结构化数据的文本文件。该文件包含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列。稍后我将空列设为零,使其成为相同数量的列并进行特征提取。

1 个答案:

答案 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')