使用numpy读取文件到Python中
这可能是个新手问题,因为我对Python的经验不多。我有一个.dat文件,已经把它转换成了.csv文件,现在想在Python中读取这个文件。这应该很简单,因为numpy有一个内置的函数可以做到这一点。我的代码是:
import numpy as np
import csv
d = np.loadtxt('scl1.csv', delimiter="\t")
我遇到的错误提示说无法将字符串转换为浮点数。我该怎么解决这个问题呢?为了让你们更明白,数据文件有6列,每个条目都是一个数字(比如7.33390715197523163E-002),它们之间用制表符分隔。我原以为问题可能出在某些数字中的E上,但我检查过了,numpy可以把它读作浮点数。非常感谢任何帮助。
我编辑了内容,加入了具体的错误信息,希望能有所帮助:
Traceback (most recent call last):
File "/Applications/Python 3.4/Markov Chain/Monte Carlo.py", line 10, in <module>
d = np.loadtxt('scl2.dat', delimiter="\t")
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/numpy/lib/npyio.py", line 848, in loadtxt
items = [conv(val) for (conv, val) in zip(converters, vals)]
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/numpy/lib/npyio.py", line 848, in <listcomp>
items = [conv(val) for (conv, val) in zip(converters, vals)]
ValueError: could not convert string to float: b' 7.33390715197523163E-002 7.68126324487871659E-002 5.46056179421958582E-002 -22.791933511352461 8.7787362443778942 -3.6715272730208461 '
1 个回答
1
loadtxt()这个函数假设文件里全是浮点数,但你的.csv文件里可能有列标题是字符串,所以就出现了转换错误。
如果你的csv文件里只有数字,没有引号,可以通过跳过文件的第一行来忽略列名。
np.loadtxt('scl1.csv', delimiter='\t', skiprows=1)
或者,如果你想同时获取列标题的话:
DELIM = '\t'
fh = open('scl1.csv')
headers = fh.readline().strip().split(DELIM)
data = np.loadtxt(fh, delimiter=DELIM)
另外,你也可以使用csv模块,然后自己转换数据类型。
read_csv = csv.reader(open('scl1.csv'))
for fields in read_csv:
pass # process fields list, which are all strings, and includes the col names
还有一个小建议:如果可以的话,尽量不要用'l'和'1'同时命名变量!