【问题标题】:IndexError: index 1 is out of bounds for axis 1 with size 1IndexError:索引 1 超出轴 1 的范围,大小为 1
【发布时间】:2015-08-06 12:43:37
【问题描述】:

我正在应用一些处理,例如将矩阵元素从一个矩阵索引值替换为另一个。它工作正常。

ds1 = [[ 4, 13,  6,  9],
      [ 7, 12,  5,  7],
      [ 7,  0,  4, 22],
      [ 9,  8, 12,  0]]

ds2 = [[ 4,  1],
       [ 5,  3],
       [ 6,  1],
       [ 7,  2],
       [ 4, 1 ],
       [ 8,  2],
       [ 9,  3],
       [12,  1],
       [13,  2],
       [22,  3]]

ds1= pd.DataFrame(ds1)
ds2= pd.DataFrame(ds2)

#Processing ds1 by replacing
print type(ds2)
ds2 = ds2.groupby(0).mean() #.........X
print type(ds2)
C = np.where(ds1.values.ravel()[:, None] == ds2.values[:, 0])
ds1_new = ds1.values.ravel()
ds1_new[C[0]]=ds2.values[C[1], 1]  #when I comment line x, it works.Otherwise getting error on this line
ds1_new = ds1_new.reshape(4,4)

使用ds2 = ds2.groupby(0).mean() 的原因是获取相似元素的平均值。当我取消注释时,它可以正常工作。

版本

Python 2.7.3
numpy - 1.9.2
pandas - 0.15.2

编辑

我的主要目标是将索引值从ds2 匹配到ds1 并将其替换为相应的值,所以输出看起来像

ds1_new = [[ 1, 2,  1,  3],
      [ 2, 1,  3,  2],
      [ 2,  0,  1, 3],
      [ 3,  2, 1,  0]]

【问题讨论】:

  • 运行你的代码没有错误
  • @EdChum:我更新了我的版本,会不会是版本的原因?
  • 这不是旧版本,基本上你是分配给一个命名引用,所以 groupby 做什么都没有关系,它不会引发错误
  • @EdChum:错误不在该行,如果我取消注释 ds2 = ds2.groupby(0).mean(),则会出现错误 ds1_new[C[0]]=ds2.values[C[1], 1]
  • 我指的是原始编辑,其中 groupby 是一个错误,运行整个代码时出现错误,JohnE 强调的问题是没有匹配项,所以你得到一个空数组.你在这里尝试的有点奇怪,你需要充分解释你想要做什么

标签: python numpy pandas


【解决方案1】:

我敢打赌,这将比您预期的要容易。首先,让ds2 成为字典而不是数据框。

 ds2 = dict([
       [ 4,  1],
       [ 5,  3],
       [ 6,  1],
       [ 7,  2],
       [ 4,  1],
       [ 8,  2],
       [ 9,  3],
       [12,  1],
       [13,  2],
       [22,  3]])

现在,我们将直接使用ds2 来映射ds1 中的所有元素:

ds3 = ds1.copy()
for i in range(4):
    ds3[i] = ds3[i].map( ds2 )

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

如果您想要 0 而不是 NaN,只需执行 ds3.fillna(0)

由于某种原因,我无法让它工作:

ds3.applymap( ds2 )

但这有效并避免了列的循环,尽管语法不像系列那样简单:

ds1.applymap( lambda x: ds2.get(x,0) )

【讨论】:

  • 非常感谢,请查看http://stackoverflow.com/questions/30489216/matrix-processing-using-pandas-fails-on-larger-data-size
猜你喜欢
  • 2021-05-16
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
  • 2019-03-12
  • 2018-04-10
  • 2018-05-09
  • 2020-01-16
相关资源
最近更新 更多