Python DataFrame TypeError: только целочисленные скалярные массивы могут быть преобразованы в скалярный индекс - PullRequest
2 голосов
/ 10 апреля 2020

Я знаю, что уже есть несколько вопросов об этой ошибке. Но в данном конкретном случае я не уверен, есть ли уже решение моей проблемы. У меня есть эта часть кода, и я хочу напечатать столбец "y" из df. Возникает следующая ошибка: 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. Заранее спасибо!

1 Ответ

1 голос
/ 10 апреля 2020

Ах, вы передаете свой аргумент columns как список в списке (feat_cols уже имеет тип list). Это превращает заголовки ваших столбцов в двухмерные: вы можете видеть, что df.info() говорит, что оно колеблется от (xvec0,) до ... вместо xvec0.

Передача columns=feat_cols должна помочь: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...