1

我有一个包含振动数据的 tsv 文件(出于某种愚蠢的原因,用逗号代替了点,因此使用了转换器)。我想从其中两个通道生成 numpy 数组,但得到一个我无法弄清楚的“ValueError:要解包的值太多(预期为 2)”。

在 ipython 中(带有 pylab 选项):

In [171] import re

In [172]: def qdsub(s):
   .....:     return re.sub('\,', '.', str(s)[2:-1])
   .....:

In [173]: x, y = genfromtxt('QD1_short.tsv', delimiter='\t', usecols=(0, 1), 
   .....: unpack=True, skip_header=13, converters={0:qdsub, 1:qdsub}, 
   .....: skip_footer=2, dtype=float)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-177-e17389233ac3> in <module>()
        1 x, y = genfromtxt('QD1_short.tsv', delimiter='\t', usecols=(0, 1), 
        2 unpack=True, skip_header=13, converters={0:qdsub, 1:qdsub},
  ----> 3 skip_footer=2, dtype=float)

ValueError: too many values to unpack (expected 2)
4

3 回答 3

1

也许这就是问题所在:

x, y = ge...

尝试

v = ge...

例子:

>>> a, b = [1,2,3,4]

Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    a, b = [1,2,3,4]
ValueError: too many values to unpack
于 2013-11-20T11:24:54.560 回答
0

The documentation of numpy.genfromtxt says:

unpack : bool, optional

If True, the returned array is transposed, so that arguments may be unpacked 
using x, y, z = loadtxt(...)

My best guess is that you should try to wrap the genfromtxt inside loadtxt:

from numpy import loadtxt, genfromtxt
(...)

x, y = loadtxt(genfromtxt('QD1_short.tsv', delimiter='\t', usecols=(0, 1), 
                          unpack=True, skip_header=13, converters={0:qdsub, 1:qdsub}, 
                          skip_footer=2, dtype=float))
于 2013-11-20T11:53:21.750 回答
0

问题出在转换器中,它显然应该返回一个浮点数

def qdsub(s):
    return float(re.sub('\,', '.', str(s)[2:-1]))
于 2013-11-21T07:35:33.997 回答