Я уверен, что тип "items_tmp_dic2" является dict, так зачем сообщать об этой ошибке? - PullRequest
0 голосов
/ 24 сентября 2019
import pandas as pd
import numpy as np
path = 'F:/datasets/kaggle/predict_future_sales/'
train_raw = pd.read_csv(path + 'sales_train.csv')
items = pd.read_csv(path + 'items.csv')
item_category_id = items['item_category_id']
item_id = train_raw.item_id

train_raw.head ()

date    date_block_num  shop_id item_id item_price  item_cnt_day
0   02.01.2013  0   59  22154   999.00  1.0
1   03.01.2013  0   25  2552    899.00  1.0
2   05.01.2013  0   25  2552    899.00  -1.0
3   06.01.2013  0   25  2554    1709.05 1.0
4   15.01.2013  0   25  2555    1099.00 1.0

items.head ()

    item_name   item_id item_category_id
0   ! ВО ВЛАСТИ НАВАЖДЕНИЯ (ПЛАСТ.) D   0   40
1   !ABBYY FineReader 12 Professional Edition Full...   1   76
2   ***В ЛУЧАХ СЛАВЫ (UNV) D    2   40
3   ***ГОЛУБАЯ ВОЛНА (Univ) D   3   40
4   ***КОРОБКА (СТЕКЛО) D   4   40

Затем я хочу добавить «item_category_id» к train_raw, вы имеете в виду изданные о предметах, поэтому я хочу создать элемент item_id и item_category_id

item_category_id = items['item_category_id']
item_id = train_raw.item_id
items_tmp = items.drop(['item_name'],axis=1)
items_tmp_dic = items_tmp.to_dict('split')
items_tmp_dic = items_tmp_dic.get('data')

items_tmp_dic2 = dict(items_tmp_dic)

ic_id = []
for i in np.nditer(item_id.values[:10]):
    ic_id.append(items_tmp_dic2.get(i))
print(len(ic_id))

неправильно

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-50-be637620ea6d> in <module>
      6 ic_id = []
      7 for i in np.nditer(item_id.values[:10]):
----> 8     ic_id.append(items_tmp_dic2.get(i))
      9 print(len(ic_id))

TypeError: unhashable type: 'numpy.ndarray'

, но когда я запускаю

for i in np.nditer(item_id.values[:10]):
    print(i)

, я получаю

22154
2552
2552
2554
2555
2564
2565
2572
2572
2573

Я гарантировал, что тип "items_tmp_dic2" является dict, так почему?

1 Ответ

0 голосов
/ 24 сентября 2019

Я решил это с помощью int ()

for i in np.nditer(item_id.values[:10]):
    ic_id.append(items_tmp_dic2.get(int(i)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...