向numpy genfromtxt添加名称参数导致读取空字符串的数据

时间:2019-06-19 15:41:06

标签: python numpy genfromtxt

我可以正常读取数据文件,但是只要尝试通过自己指定名称或从第一行读取来添加名称参数,我都会返回空字符串

data_no_headers = genfromtxt('SimpleDataWithHeaders.csv',delimiter=',',dtype='str',autostrip=True)
print(data_no_headers)
data_with_headers = genfromtxt('SimpleDataWithHeaders.csv',delimiter=',',dtype='str',autostrip=True,names=True)
print(data_with_headers)
data_with_headers = genfromtxt('SimpleDataWithHeaders.csv',delimiter=',',skip_header=1,dtype='str',autostrip=True,names="A,B")
print(data_with_headers)
mycols = ['a','b']
data_with_headers = genfromtxt('SimpleDataWithHeaders.csv',delimiter=',',skip_header=1,dtype='str',autostrip=True,names=mycols)
print(data_with_headers)

如果执行此代码,我将得到以下输出(我制作了一个非常简单的csv文件,其中包含三行和一个标题行以说明问题),您可以看到上述每个命令获得的输出。您可以看到它正常工作,直到我添加了名称参数

[['CODE' 'AIRPORT']
['HOU' 'Houston']
['ABQ' 'Alberquerque']
['BWI' 'Baltimore']]

[('', '') ('', '') ('', '')]

[('', '') ('', '') ('', '')]

[('', '') ('', '') ('', '')]

1 个答案:

答案 0 :(得分:0)

模拟文件:

In [243]: txt = """CODE, AIRPORT 
     ...: HOU, Houston 
     ...: ABQ, Alberquerque 
     ...: BWI, Baltimore"""                                                               

在不使用标题的情况下阅读:

In [244]: data = np.genfromtxt(txt.splitlines(), delimiter=',', dtype=str, skip_header=1, 
     ...: encoding=True)                                                                  
In [245]: data                                                                            
Out[245]: 
array([['HOU', ' Houston'],
       ['ABQ', ' Alberquerque'],
       ['BWI', ' Baltimore']], dtype='<U13')

结果是带有字符串dtype的二维数组。

使用标题,并且dtype = None:

In [246]: data = np.genfromtxt(txt.splitlines(), delimiter=',', dtype=None, names=True, en
     ...: coding=True)                                                                    
In [247]: data                                                                            
Out[247]: 
array([('HOU', ' Houston'), ('ABQ', ' Alberquerque'),
       ('BWI', ' Baltimore')],
      dtype=[('CODE', '<U3'), ('AIRPORT', '<U13')])
In [248]: data.shape                                                                      
Out[248]: (3,)
In [249]: data['CODE']                                                                    
Out[249]: array(['HOU', 'ABQ', 'BWI'], dtype='<U3')

结果是一个结构化的数组-具有2个字段的1d,可通过名称进行访问。

对于str dtype,它也是结构化的,但是dtype是'U',一个0字节的字符串,因此显示为空字符串:

In [250]: data = np.genfromtxt(txt.splitlines(), delimiter=',', dtype=str, names=True, enc
     ...: oding=True)                                                                     
In [251]: data                                                                            
Out[251]: 
array([('', ''), ('', ''), ('', '')],
      dtype={'names':['CODE','AIRPORT'], 'formats':['<U','<U'], 'offsets':[0,0], 'itemsize':2})

普通print省略了dtype,可能会造成混淆:

In [252]: print(data)                                                                     
[('', '') ('', '') ('', '')]