[英]Adding names parameter to numpy genfromtxt causing to read empty strings for data
我可以很好地读取数据文件,但是一旦我尝试通过自己指定名称或从第一行读取来添加name参数,我就会返回空字符串
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']]
[('', '') ('', '') ('', '')]
[('', '') ('', '') ('', '')]
[('', '') ('', '') ('', '')]
模拟文件:
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的2d数组。
使用标头,并且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)
[('', '') ('', '') ('', '')]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.