TypeError:x

时间:2015-10-16 18:46:10

标签: python numpy pandas linear-regression polynomials

我收到错误:

  

TypeError:x

的预期1D向量

关于这一行:

  

系数= np.polyfit(x1,y1,1)

coefficients = np.polyfit(x1, y1, 1)
polynomial = np.poly1d(coefficients)
ys = polynomial(x1)

x1& y1是;

x = frame_query("select * from table",db)
y = frame_query("select * from table",db)

x1 = np.array(x)
y1 = np.array(y)

包含736行数据。我想将一行倒退到另一行。有人可以帮忙吗?

感谢。

2 个答案:

答案 0 :(得分:2)

您需要将数据框转换为1D数组。首先让我创建一个数据框

import pandas
d = pandas.DataFrame([[1,2],[3,4],[5,6]],columns=['x1','y1'])

我认为以下是您想要的:

import numpy
x1 = numpy.array(d['x1'])
y1 = numpy.array(d['y1'])
numpy.polyfit(x1,y1,1)

我认为您遇到的问题是您正在创建的阵列有一个额外的维度。例如,下面的数组ab“看起来”就像x1y1

a = numpy.array([[1,3,5]])
b = numpy.array([[2,4,6]])

但由于双括号([[...]]),它们实际上是二维的。我可以通过仅选择第0列来缩小尺寸:

x1 = a[0,:]
y1 = b[0,:]

然后polyfit会起作用。编辑:如果你看一下阵列的形状(例如x1.shape),你应该能够判断你是否有“额外的尺寸”。

答案 1 :(得分:0)

尝试制作x1和y1 np.array:

>>> result = df.groupby("c3")[["c1", "c2"]].apply(lambda x: dict(x.values))
>>> result
c3
alpha    {'three': '0.7458197179794177', 'one': '0.6799...
beta     {'one': '0.12943266757277916', 'three': '0.289...
gamma    {'three': '0.7018221838129789', 'one': '0.3664...
zeta                       {'three': '0.7195852795555373'}
dtype: object
>>> result.to_dict()
{'zeta': {'three': '0.7195852795555373'}, 'gamma': {'three': '0.7018221838129789', 'one': '0.36642834809341274', 'two': '0.5690944224514624'}, 'beta': {'one': '0.12943266757277916', 'three': '0.28944292691097817'}, 'alpha': {'three': '0.7458197179794177', 'one': '0.679926178687387', 'two': '0.11495090934413166'}}