gpt4 book ai didi

python - Pandas iloc 错误索引导致减法问题

转载 作者:行者123 更新时间:2023-12-01 01:25:07 25 4
gpt4 key购买 nike

首先我应该说,我对 pandas 和 numpy(以及一般的机器学习)还很陌生。

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

我发现有几篇文章讨论了 iloc 和 ix 之间的差异,并且 ix 已被弃用,因此请使用 iloc,但 iloc 给我带来了很多问题。我只是想将数据帧中的前 n-1 列拉入新的数据帧,然后将最后一列拉入另一个数据帧以获取标签值。然后我想执行一次成本函数,看看 theta = 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,因为据说它正在弃用。

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

最佳答案

看起来您真正想要做的计算是在系列(单个列)上。所以你应该能够做到:

predictions[0].subtract(y[1])

得到你想要的值。这看起来有点令人困惑,因为您有数字作为 DataFrame 列,您正在选择所需的列(0 和 1)并在它们之间执行减法。

或者按照您最初的建议使用 iloc,这会给您更多类似矩阵样式的索引,您可以这样做:

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

因为在每个 DataFrame 中,您需要所有行和第一

关于python - Pandas iloc 错误索引导致减法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53437621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com