Pandas ValueError:解压缩np.polyfit的值太多了

时间:2016-10-25 21:54:55

标签: python csv pandas

我正在尝试对我拥有的一些数据进行多项式回归。我已成功致电

m, b = np.polyfit(x.values.flatten(), y.values.flatten(), 1)

然而,当我将度数增加到高于1的任何值时,我得到以下错误:

np.polyfit(x.values.flatten(), y.values.flatten(), 2)
ValueError: too many values to unpack

我正在阅读数据:

x = pandas.read_csv('D3.csv', usecols = [0])
y = pandas.read_csv('D3.csv', usecols = [3])

知道为什么会这样吗?

2 个答案:

答案 0 :(得分:3)

在通过documentation触及您的问题之前,np.polyfit仅返回2个参数:

  1. 拟合多项式的系数数组
  2. 这些系数的协方差矩阵
  3. 现在,仅当您使用两个可选参数np.polyfit调用full = False and cov=True时,才会显示第二个参数。

    回到你的问题:由于你没有设置cov = True(默认为full=False),你的函数只返回一个数组。将度数设置为1时,返回的数组有两个元素([a,c]中为ax + c),python会自动在代码中分配m = ab = c。当达到更高的程度时,返回的数组有两个以上的元素,python尝试将它们分配给你在赋值之前放入的所有变量,但是因为有超过2个,你需要超过2个变量。 即考虑python 2中的这个小运行:

    >>> a,c = [1,2]
    >>> a
    1
    >>> c
    2
    >>> a,c = [1,2,3]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: too many values to unpack
    

    现在,正确的方法是设置一个返回值。例如:

    import pandas
    import numpy as np
    import sys
    
    deg = int(sys.argv[1])
    
    x = pandas.read_csv('test.csv',usecols=[0])
    y = pandas.read_csv('test.csv',usecols=[1])
    m = np.polyfit(x.values.flatten(), y.values.flatten(), deg)
    
    print m
    

    假设代码在文件stackoverflow.py中。示例电话:

    Chip chip@ 09:15:48@ ~: python stackoverflow.py 1
    [  8. -12.]
    Chip chip@ 09:15:51@ ~: python stackoverflow.py 2
    [  1.00000000e+00  -1.45528372e-14   3.11727844e-14]
    Chip chip@ 09:15:56@ ~: python stackoverflow.py 3
    [ -3.16472437e-16   1.00000000e+00  -2.82243562e-14   4.43123853e-14]
    

    换句话说,所有系数都打包成一个数组并返回。

答案 1 :(得分:0)

如果我们按如下方式测试:

import numpy as np

x = [1,2,3,4,5,6,7,8,9,10]
y = [2,4,5,7,8,9,8,7,2,1]

pf = np.polyfit(x,y,1)
print (pf)

pf = np.polyfit(x,y,2)
print (pf)

pf = np.polyfit(x,y,3)
print (pf)

......我们得到:

[-0.05454545  5.6       ]
[-0.35984848  3.90378788 -2.31666667]
[-0.02466977  0.0472028   2.02641803 -0.2       ]

...因此,在第一种情况下只有两个项目要解包,而在其他情况下则更多。