Python 3.x 为什么我得到数据帧点函数的矩阵未对齐错误?

Python 3.x 为什么我得到数据帧点函数的矩阵未对齐错误?,python-3.x,pandas,Python 3.x,Pandas,我正在尝试使用Numpy和Pandas在Python中实现简单的线性回归。但是我得到了一个值错误:如文档所述,调用点函数本质上计算矩阵乘法时,矩阵没有对齐。以下是代码片段: import numpy as np import pandas as pd #initializing the matrices for X, y and theta #dataset = pd.read_csv("data1.csv") dataset = pd.DataFrame([[6.1101,17.592],[

我正在尝试使用Numpy和Pandas在Python中实现简单的线性回归。但是我得到了一个值错误:如文档所述,调用点函数本质上计算矩阵乘法时,矩阵没有对齐。以下是代码片段:

import numpy as np
import pandas as pd

#initializing the matrices for X, y and theta
#dataset = pd.read_csv("data1.csv")
dataset = pd.DataFrame([[6.1101,17.592],[5.5277,9.1302],[8.5186,13.662],[7.0032,11.854],[5.8598,6.8233],[8.3829,11.886],[7.4764,4.3483],[8.5781,12]])
X = dataset.iloc[:, :-1]
y = dataset.iloc[:, -1]
X.insert(0, "x_zero", np.ones(X.size), True)
print(X)
print(f"\n{y}")
theta = pd.DataFrame([[0],[1]])
temp = pd.DataFrame([[1],[1]])
print(X.shape)
print(theta.shape)
print(X.dot(theta))
这是相同的输出:

   x_zero       0
0     1.0  6.1101
1     1.0  5.5277
2     1.0  8.5186
3     1.0  7.0032
4     1.0  5.8598
5     1.0  8.3829
6     1.0  7.4764
7     1.0  8.5781

0    17.5920
1     9.1302
2    13.6620
3    11.8540
4     6.8233
5    11.8860
6     4.3483
7    12.0000
Name: 1, dtype: float64
(8, 2)
(2, 1)
Traceback (most recent call last):
  File "linear.py", line 16, in <module>
    print(X.dot(theta))
  File "/home/tejas/.local/lib/python3.6/site-packages/pandas/core/frame.py", line 1063, in dot
    raise ValueError("matrices are not aligned")
ValueError: matrices are not aligned
x_零0
0     1.0  6.1101
1     1.0  5.5277
2     1.0  8.5186
3     1.0  7.0032
4     1.0  5.8598
5     1.0  8.3829
6     1.0  7.4764
7     1.0  8.5781
0    17.5920
1     9.1302
2    13.6620
3    11.8540
4     6.8233
5    11.8860
6     4.3483
7    12.0000
名称:1,数据类型:float64
(8, 2)
(2, 1)
回溯(最近一次呼叫最后一次):
文件“linear.py”,第16行,在
打印(X点(θ))
文件“/home/tejas/.local/lib/python3.6/site packages/pandas/core/frame.py”,第1063行,圆点
提升值错误(“矩阵未对齐”)
ValueError:矩阵未对齐

正如您可以看到这两个轴的形状属性输出一样,第二个轴具有相同的维度(2),点函数应该返回一个8*1的数据帧。那么,为什么会出现错误?

这种错位不是形状造成的,而是索引造成的。您有两个选项来解决问题:

调整
theta
赋值:

theta=pd.DataFrame([[0],[1]],index=X.columns)
因此,您所乘的索引将匹配

通过将第二个
df
移动到
numpy
,删除索引相关性:

X.dot(θ到μnumpy())

此功能实际上在
pandas
中很有用-它试图匹配智能索引,当它变得适得其反时,您的情况就是非常具体的;)

@Parfait我错了。我已经编辑了代码,并从csv中为DataFrame放置了一些数据库的起始行。快告诉我!根据,DataFrame的列名和其他的索引必须包含相同的值