Python 导致减法问题的iloc错误索引

Python 导致减法问题的iloc错误索引,python,pandas,Python,Pandas,首先,我应该说,我对熊猫和numpy(以及一般的机器学习)相当陌生 我正在学习一些基本的机器学习算法,并且正在做线性回归。我已经用matlab完成了这个问题,但我想尝试用python实现它——因为python是一种更实用的语言。我在使用这些库进行基本的矩阵运算时遇到了困难,我认为这是因为我不了解pandas是如何索引数据帧的 我发现有几篇文章讨论了iloc和ix之间的差异,ix被弃用,所以请使用iloc,但iloc给我带来了很多问题。我只是尝试将数据帧中的前n-1列拉入新的数据帧,然后将最后一列

首先,我应该说,我对熊猫和numpy(以及一般的机器学习)相当陌生

我正在学习一些基本的机器学习算法,并且正在做线性回归。我已经用matlab完成了这个问题,但我想尝试用python实现它——因为python是一种更实用的语言。我在使用这些库进行基本的矩阵运算时遇到了困难,我认为这是因为我不了解pandas是如何索引数据帧的

我发现有几篇文章讨论了iloc和ix之间的差异,ix被弃用,所以请使用iloc,但iloc给我带来了很多问题。我只是尝试将数据帧中的前n-1列拉入新的数据帧,然后将最后一列拉入另一个数据帧以获取标签值。然后我想执行一次成本函数,看看θ=0时我的当前成本是多少。目前,我的数据集只有一个标签——但我想编码,就好像我有更多标签一样。以下是我的代码和输出:

path = os. getcwd() + '\\ex1data1.txt'
data = pd.read_csv(path, header=None)

numRows = data.shape[0]
numCols = data.shape[1]

X = data.iloc[:,0:numCols-1].copy()
theta = pd.DataFrame(np.zeros((X.shape[1], 1)))
y = data.iloc[:,-1].copy()

#start computing cost sum((X-theta)-y).^2)
predictions = X.dot(theta)
print("predictions shape: {0}".format(predictions.shape))
print(predictions.head())
print("y shape: {0}".format(y.shape))
print(y.head())

errors = predictions.subtract(y)

print("errors shape: {0}".format(errors.shape))
print(errors.head())
输出:

predictions shape: (97, 1)
 0
0  0.0
1  0.0
2  0.0
3  0.0
4  0.0
y shape: (97, 1)
     1
0  17.5920
1   9.1302
2  13.6620
3  11.8540
4   6.8233
errors shape: (97, 2)
0   1
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
我可以看到y和X具有相同的形状,但出于某种原因,当我显示它们时-似乎y从第1列开始索引(它在第一个数据帧中的原始位置),而X的原始列为0。因此,pandas正确地进行了减法运算,并用NaN替换了任何缺失的值。由于y没有第0列值,它们都是
NaN
,而X没有第1列值,它们都是
NaN
,从而形成一个97x2
NaN
矩阵

如果我使用‍‍‍‍‍‍
y=data.ix[:,-1:0]
-上述代码执行正确的计算。输出:

 errors shape: (97, 1)
         0
     0 -6.1101
     1 -5.5277
     2 -8.5186
     3 -7.0032
     4 -5.8598
但我正试图远离ix,因为有人说它是不受欢迎的


如何告诉熊猫新矩阵的起始列为0,为什么这不是默认行为?

看起来您实际要进行的计算是在序列(单个列)上进行的。因此,您应该能够做到:

predictions[0].subtract(y[1])
以获得所需的值。这看起来有点令人困惑,因为您将数字作为数据帧列,您正在选择所需的列(0和1)并在它们之间执行减法

或者像您最初建议的那样使用iloc,这更像是矩阵式索引,您可以这样做:

predictions.iloc[:, 0].subtract(y.iloc[:, 0])

因为在每个数据帧中,您需要所有行和第一列非常感谢您的帮助!我没有意识到列,或者更确切地说是列名,很重要。有没有更简洁的方法将一个矩阵转换为两个独立的矩阵?还是我的做法可以接受?谢谢你的帮助