简体   繁体   English

Numpy TypeError:必须为整数

[英]Numpy TypeError: an integer is required

This will be maybe quite personal question but I don't know who to ask I hope somebody can help and don't skip me THANKS!. 这也许是个非常个人的问题,但我不知道该问谁,我希望有人能提供帮助,不要跳过我! I have installed python using Anaconda and using Jupyter notebook. 我已经使用Anaconda和Jupyter Notebook安装了python。 I have 2 csv files of data. 我有2个csv文件数据。

products.head()
     ID_FUPID   FUPID
    0   1   674563
    1   2   674597
    2   3   674606
    3   4   694776
    4   5   694788

Products contain id of product and product number. 产品包含产品ID和产品编号。

ratings.head()
 ID_CUSTOMER    ID_FUPID    RATING
0   1   216     1
1   2   390     1
2   3   851     5
3   4   5897    1
4   5   9341    1

Ratings containt id of customer, productID and Rating which customer give to product. 评级包含客户的ID,产品ID和客户给予产品的评级。 I have created table as: 我创建表为:

M = ratings.pivot_table(index=['ID_CUSTOMER'],columns=['ID_FUPID'],values='RATING')

Which is showing data correctly in matrix with productID= columns and customerID as rows. 正确显示矩阵中的数据,其中productID =列,customerID为行。

I wanted to count pearson colleration between products so here is the pearson function: 我想计算产品之间的皮尔逊协作,所以这是皮尔逊函数:

def pearson(s1, s2):
    import numpy as np 
    """take two pd.series objects and return a pearson correlation"""
    s1_c = s1 - s1.mean()
    s2_c = s2 - s2.mean()
    return np.sum(s1_c * s2_c) / np.sqrt(np.sum(s1_c ** 2) * np.sum(s2_c ** 2))

When I'm trying to count pearson(M['17'], M['21']) I got following errors: 当我尝试计算pearson(M ['17'],M ['21'])时 ,出现以下错误:

TypeError                                 Traceback (most recent call last)
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

TypeError: an integer is required

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2441             try:
-> 2442                 return self._engine.get_loc(key)
   2443             except KeyError:

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

KeyError: '17'

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

TypeError: an integer is required

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
<ipython-input-277-d4ead225b6ab> in <module>()
----> 1 pearson(M['17'], M['21'])

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
   1962             return self._getitem_multilevel(key)
   1963         else:
-> 1964             return self._getitem_column(key)
   1965 
   1966     def _getitem_column(self, key):

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\frame.py in _getitem_column(self, key)
   1969         # get column
   1970         if self.columns.is_unique:
-> 1971             return self._get_item_cache(key)
   1972 
   1973         # duplicate columns & possible reduce dimensionality

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\generic.py in _get_item_cache(self, item)
   1643         res = cache.get(item)
   1644         if res is None:
-> 1645             values = self._data.get(item)
   1646             res = self._box_item_values(item, values)
   1647             cache[item] = res

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\internals.py in get(self, item, fastpath)
   3588 
   3589             if not isnull(item):
-> 3590                 loc = self.items.get_loc(item)
   3591             else:
   3592                 indexer = np.arange(len(self.items))[isnull(self.items)]

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2442                 return self._engine.get_loc(key)
   2443             except KeyError:
-> 2444                 return self._engine.get_loc(self._maybe_cast_indexer(key))
   2445 
   2446         indexer = self.get_indexer([key], method=method, tolerance=tolerance)

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

KeyError: '17'

I will really appreciate any help ! 我将非常感谢您的帮助! thanks a million. 太感谢了。

There were two places in the error message with the following line: 错误消息中有两个地方,带有以下行:

KeyError: '17'

This indicates there is no key '17' in M . 这表明M没有键'17' This is likely because your index is an integer. 这可能是因为您的索引是整数。 However, you are currently accessing the DataFrame M with a string. 但是,您正在访问的数据帧M有一个字符串。 The code to call pearson might be as follows: 调用pearson的代码可能如下:

pearson(M[17], M[21])

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM