【问题标题】:Python DataFrame TypeError: only integer scalar arrays can be converted to a scalar indexPython DataFrame TypeError:只能将整数标量数组转换为标量索引
【发布时间】:2020-07-23 11:15:13
【问题描述】:

我知道关于这个错误已经有几个问题了。但在这种特殊情况下,我不确定是否已经有解决我的问题的方法。 我有这部分代码,我想打印 Dataframe df 的列“y”。 出现以下错误: TypeError: 只有整数标量数组可以转换为标量索引

labels=[]
xvectors=[]

for i in data:
    labels.append(i[0])
    xvectors.append(i[1])

X = np.array(xvectors)
y = np.array(labels)

feat_cols = [ 'xvec'+str(i) for i in range(X.shape[1]) ]
print(feat_cols)
df = pd.DataFrame(X,columns=[feat_cols])
df['y']= y
#df['label'] = df['y'].apply(lambda i: str(i))
print(df['y'])

X, y = None, None

打印整个 DataFrame 是可能的。这看起来像:

        xvec0     xvec1     xvec2     xvec3     xvec4  ...   xvec508   xvec509   xvec510   xvec511        y
0    3.397163 -1.112423  0.414708  0.563083  1.371336  ...  1.201095 -0.076261 -0.620443 -1.231465  DA01_03
1    0.159473  1.884818 -1.511547 -0.153500 -0.635701  ... -1.217205 -1.922081  0.878613  0.087912  DA01_06
2    1.089404  0.331919 -1.027480  0.594129 -2.473234  ... -3.505570 -3.509632 -0.553128 -0.453307  DA01_10
3    0.183993 -1.741467 -0.142570 -3.158320  4.355789  ...  3.857311  3.142393  0.991663 -2.842322  DA01_14

这是整个错误信息:

    print(df['y'])
  File "/usr/local/lib/python3.7/dist-packages/pandas/core/frame.py", line 2958, in __getitem__
    return self._get_item_cache(key)
  File "/usr/local/lib/python3.7/dist-packages/pandas/core/generic.py", line 3270, in _get_item_cache
    values = self._data.get(item)
  File "/usr/local/lib/python3.7/dist-packages/pandas/core/internals/managers.py", line 960, in get
    return self.iget(loc)
  File "/usr/local/lib/python3.7/dist-packages/pandas/core/internals/managers.py", line 977, in iget
    block = self.blocks[self._blknos[i]]
TypeError: only integer scalar arrays can be converted to a scalar index

我认为这与 numpy 数组有关。 提前谢谢!

【问题讨论】:

  • i[0] 中有什么内容?你能出示labels的打印件吗?
  • 打印任何其他列时会出现同样的错误。在 i[0] 中是一个字符串,就像最右边的列一样。它看起来像这样:DA01_03 DA01_06 DA01_10 DA01_14
  • print(dfA.reset_index()) 也许?看起来确实是由于X 的构造方式。 dfA.info() 可能会给我们更好的提示。
  • 感谢您的回答。 df.info() 给出: RangeIndex: 109 个条目,0 到 108 列:513 个条目,(xvec0,) 到 (y,) dtypes: float32(512), object( 1) 内存使用量:219.0+ KB 无 reset_index() 仅返回 df。它不能解决问题。

标签: python pandas numpy


【解决方案1】:

啊,您将columns 参数作为列表中的列表传递(feat_cols 已经属于列表类型)。这会将您的列标题变成二维:您可以看到 df.info() 表示它的范围从 (xvec0,) 到 ... 而不是 xvec0

传递 columns=feat_cols 应该可以解决问题 :-)

【讨论】:

  • 天哪。我没看到!谢谢!
  • 哇,我刚刚犯了同样的错误。感谢您回答这个问题!
猜你喜欢
  • 2020-04-30
  • 2019-03-15
  • 2019-04-26
  • 1970-01-01
  • 2021-02-09
  • 2020-04-20
  • 2021-01-17
  • 2020-03-12
  • 2020-09-24
相关资源
最近更新 更多