在genfromtx中有太多的值无法解包

2024-10-01 17:36:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含振动数据的tsv文件(由于一些愚蠢的原因,用逗号代替了点,因此是转换器)。我想从其中的两个通道生成numpy数组,但是得到了一个“ValueError:too much values to unpack(expected 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)

Tags: toinretsvipythontooshortexpected
3条回答

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

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

numpy.genfromtxtdocumentation表示:

unpack : bool, optional

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

我的最佳猜测是您应该尝试将genfromtxt包装在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))

也许这就是问题所在:

x, y = ge...

试试看

^{pr2}$

示例:

>>> 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

相关问题 更多 >

    热门问题