pandas 接收`KeyError: u'no item named XYZ'` 错误

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20854072/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 21:29:59  来源:igfitidea点击:

Receiving `KeyError: u'no item named XYZ'` error

pythoncsvpandas

提问by Mona Jalal

Here's the error I receive after running it I have this problem:

这是我运行后收到的错误我有这个问题:

Traceback (most recent call last):
  File "t1.py", line 255, in <module>
    pivot_rating = ratings.pivot(index='User-ID', columns='ISBN', values='Book-Rating')
  File "/Library/Python/2.7/site-packages/pandas/core/frame.py", line 4182, in pivot
    return pivot(self, index=index, columns=columns, values=values)
  File "/Library/Python/2.7/site-packages/pandas/core/reshape.py", line 343, in pivot
    indexed = Series(self[values].values,
  File "/Library/Python/2.7/site-packages/pandas/core/frame.py", line 2003, in __getitem__
    return self._get_item_cache(key)
  File "/Library/Python/2.7/site-packages/pandas/core/generic.py", line 667, in _get_item_cache
    values = self._data.get(item)
  File "/Library/Python/2.7/site-packages/pandas/core/internals.py", line 1655, in get
    _, block = self._find_block(item)
  File "/Library/Python/2.7/site-packages/pandas/core/internals.py", line 1935, in _find_block
    self._check_have(item)
  File "/Library/Python/2.7/site-packages/pandas/core/internals.py", line 1942, in _check_have
    raise KeyError('no item named %s' % com.pprint_thing(item))
KeyError: u'no item named Book-Rating'
Line 255 is pivot_rating = ratings.pivot(index='User-ID', columns='ISBN', values='Book-Rating')

After running the following code:

运行以下代码后:

ratings = pd.read_csv('/Users/mona/Downloads/BX-Dump/BX-Book-Ratings.csv', sep=";", quotechar="\"", escapechar="\")

print ratings
# <class 'pandas.core.frame.DataFrame'> 
# Int64Index: 1149779 entries, 0 to 1149778 
# Data columns (total 3 columns): 
# 276725 1149779 non-null values 
# 034545104X 1149779 non-null values 
# 0 1149779 non-null values

pivot_rating = ratings.pivot(index='User-ID', columns='ISBN', values='Book-Rating')

However the file BX-Book-Ratings.csvhas three columns and the third column is rating and each row is like this "276725";"034545104X";"0". Any idea what's wrong?

但是该文件BX-Book-Ratings.csv有三列,第三列是评级,每一行都是这样的"276725";"034545104X";"0"。知道出了什么问题吗?

回答by alko

Your ratingsDataFrame has no column named 'Book-Rating':

您的ratingsDataFrame 没有名为 的列'Book-Rating'

>>> ratings = pd.DataFrame([[276725,"034545104X",0]], 
...                columns=['User-ID', 'ISBN', 'Book-Rating'])
>>> ratings.pivot(index='User-ID', columns='ISBN', values='Book-Rating')
ISBN     034545104X
User-ID
276725            0

Compare with:

与之比较:

>>> ratings.columns = ['User-ID', 'ISBN', 'BookRating']
>>> ratings.pivot(index='User-ID', columns='ISBN', values='Book-Rating')
Traceback (most recent call last):
  ...
KeyError: u'no item named Book-Rating'

Update:

更新

Solution in your case is to specify columns in code that loads data using namesparamether. Try replace

您的情况的解决方案是在使用参数加载数据的代码中指定列names。尝试更换

pd.read_csv('/Users/mona/Downloads/BX-Dump/BX-Book-Ratings.csv', 
     sep=";", quotechar="\"", escapechar="\")

with

pd.read_csv('/Users/mona/Downloads/BX-Dump/BX-Book-Ratings.csv', 
     header=None, names=['User-ID', 'ISBN', 'Book-Rating'],
     sep=";", quotechar="\"", escapechar="\")