我可以正常读取数据文件,但是只要尝试通过自己指定名称或从第一行读取来添加名称参数,我都会返回空字符串
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']]
[('', '') ('', '') ('', '')]
[('', '') ('', '') ('', '')]
[('', '') ('', '') ('', '')]
答案 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)
[('', '') ('', '') ('', '')]