小能豆

python IndexError: tuple index out of range

python

data = pd.DataFrame(index=range(data_x.shape[0]), columns=range(9))

data建立出来的样子

0  1      2        3       4       5        6       7       8

0 1 1 NaN NaN NaN NaN NaN NaN NaN
1 1 1 NaN NaN NaN NaN NaN NaN NaN
2 1 1 NaN NaN NaN NaN NaN NaN NaN
3 1 1 NaN NaN NaN NaN NaN NaN NaN
4 1 1 NaN NaN NaN NaN NaN NaN NaN

data[0] = 1
data[1] = 1

data[:, 2:2 + data_x.shape[1]] = data_x
data[:, 2 + data_x.shape[1]:2 + data_x.shape[1] + data_y.shape[1]] = data_y

data_x

[0 1 4 2 3]

data_y 是120行的数据,由于太多我就不放了

[[ 29.2611465 1683.417623 ]
[ 29.2611465 1683.417623 ]
[ 29.2611465 1683.417623 ]
[ 29.2611465 1683.417623 ]
[ 29.2611465 1683.417623 ]
[ 29.2611465 1683.417623 ]
[ 29.2611465 1683.417623 ]
[ 29.2611465 1683.417623 ]]

程序目的是将 data_x 和data_y的值赋给 data 的特定列,但是运行之后会报错:
IndexError: tuple index out of range
网上查到说是元组索引超出范围,但我想这data空间也够啊,为什么data_x写不进去呢,


阅读 37

收藏
2024-06-11

共1个答案

小能豆

根据你提供的信息和代码,问题出在你试图使用 data[:, 2:2 + data_x.shape[1]]data[:, 2 + data_x.shape[1]:2 + data_x.shape[1] + data_y.shape[1]] 来进行切片赋值。Pandas DataFrame 不支持这种 NumPy 风格的切片操作。

在 Pandas 中,应该使用 ilocloc 来进行基于位置或标签的切片。为了达到你的目标,你需要分别赋值 data_xdata_ydata 的特定列。

以下是正确的实现方法:

import pandas as pd
import numpy as np

# 假设 data_x 和 data_y 已经定义
data_x = np.array([0, 1, 4, 2, 3])
data_y = np.tile(np.array([[29.2611465, 1683.417623]]), (120, 1))

# 初始化 data DataFrame,索引与 data_x 长度相同,列数为 9
data = pd.DataFrame(index=range(data_x.shape[0]), columns=range(9))

# 将 data 的前两列赋值为 1
data[0] = 1
data[1] = 1

# 将 data_x 的值赋给 data 的第 2 列开始的列
data.iloc[:, 2:2 + data_x.shape[0]] = data_x.reshape(-1, 1)

# 将 data_y 的值赋给 data 的第 2 列开始的列后面的列
# 注意,这里的 data_x.shape[0] 和 data_y.shape[1] 要匹配
data.iloc[:, 2 + data_x.shape[0]:2 + data_x.shape[0] + data_y.shape[1]] = data_y[:data.shape[0], :]

print(data)

主要修改点:

  1. 使用 iloc 进行基于位置的切片。
  2. data_x reshape 成列向量以匹配 data 中的列数。
  3. 确保 data_y 的行数与 data 的行数匹配。

如果你的 data_y 的行数确实为 120 而不是 data 的行数(例如,data_x.shape[0]),你需要确保只取前 data_x.shape[0] 行的数据。

通过上述方式,你可以正确地将 data_xdata_y 的值赋给 data 的特定列。

2024-06-11