我想用numpy创建一个数组。 基数是.txt文件,以下列形式给出:
我用loadtxt尝试了它:
data = np.loadtxt("myfile.txt",delimiter='\n',skiprows = 1)
与#34; Zeit"的第一行和"信号"应该跳过我只需要这种形式的数组:
[[0,1],[0.01,2],[0.02,3]]
来自" Zeit"的价值观和"信号用标签分开。
我收到了这个错误:
ValueError: could not convert string to float:
答案 0 :(得分:0)
看起来你不应该通过delimiter='\n'
参数。当我查看loadtxt documentation时,这个参数似乎指定了一行上的值的分隔符,而不是行的分隔符。 ...并且在没有该论据的情况下调用相同的函数对我有效。
答案 1 :(得分:0)
你可以运行以下内容并报告它返回的内容吗?具体来说,bag
中的内容是什么?
bag = []
i = 0
def probe(bit):
global i
i += 1
try:
return float(bit)
except:
bag.append((i, bit))
return np.nan
data = np.loadtxt('myfile.txt', skiprows=1, converters={0:probe, 1:probe})
好的,试试:
import itertools
data = np.loadtxt(itertools.filterfalse(lambda x: len(x.split())!=2, open('myfile.txt')), skiprows=1)
答案 2 :(得分:0)
这应该可以解决您的问题
data = np.genfromtxt("myfile.txt",skip_header = 1,dtype=None,)
data = [list(i) for i in data]
答案 3 :(得分:0)
我错误地尝试将您的文件重新创建为
Zeit\tSignal
0.01\t1.1
0.02\t1.105
0.03\t1.108
0.04\t1.2
0.05\t1.205
0.06\t1.209
载入:
data=np.loadtxt('test.txt', skiprows=1)
得到了:
ValueError: could not convert string to float: b'0.01\\t1.1'
将字符串\t
更改为实际制表符(难以通过copy-n-paste传达此内容):
In [474]: data=np.loadtxt('test.txt', skiprows=1)
In [475]: data
Out[475]:
array([[ 0.01 , 1.1 ],
[ 0.02 , 1.105],
[ 0.03 , 1.108],
[ 0.04 , 1.2 ],
[ 0.05 , 1.205],
[ 0.06 , 1.209]])
确保您的文件只包含这些字符(列之间有空格或实际标签)。它应该是纯ASCII,而不是RTF或其他格式化的测试。
可能值得尝试一个字符串dtype只是为了看看是否有一些有趣的chacacters正在提出问题,例如。
In [478]: data=np.loadtxt('test.txt', dtype=str)
In [479]: data
Out[479]:
array([["b'Zeit'", "b'Signal'"],
["b'0.01'", "b'1.1'"],
["b'0.02'", "b'1.105'"],
["b'0.03'", "b'1.108'"],
["b'0.04'", "b'1.2'"],
["b'0.05'", "b'1.205'"],
["b'0.06'", "b'1.209'"]],
dtype='<U9')