Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: 0

Tags:

python

pandas

csv

I am trying to map emotions from one dataset to another and drop everything that is bigger than 6 in the current dataset. How should I fix this error?

import pandas as pd

csv_file = 'sample.csv'
count = 1
my_filtered_csv = pd.read_csv(csv_file, usecols=['subDirectory_filePath', 'expression'])
#my_filtered_csv['expression'] = my_filtered_csv['expression'].map({ '0':'6', '1':'3', '2':'4', '3':'5', '4':'2', '5':'1', '6':'0'})

df = pd.DataFrame(columns=['subDirectory_filePath', 'expression'])
print(my_filtered_csv.dtypes.index)
filtered_csv = my_filtered_csv[my_filtered_csv.expression <= 6 ]
for i in range(len(filtered_csv['expression'])):
    if filtered_csv['expression'][i]==0:
        filtered_csv['expression'][i] = 6
    elif filtered_csv['expression'][i]==1:
        filtered_csv['expression'][i] = 3
    elif filtered_csv['expression'][i]==2:
        filtered_csv['expression'][i] = 4
    elif filtered_csv['expression'][i]==3:
        filtered_csv['expression'][i] = 5
    elif filtered_csv['expression'][i]==4:
        filtered_csv['expression'][i] = 2
    elif filtered_csv['expression'][i]==5:
        filtered_csv['expression'][i] = 1
    elif filtered_csv['expression'][i]==6:
        filtered_csv['expression'][i] = 0

print(len(my_filtered_csv))
print('****')

for val in df['expression']:
    print(val)
emotion_map = { '0':'6', '1':'3', '2':'4', '3':'5', '4':'2', '5':'1', '6':'0'}
print(emotion_map)

for key, value in emotion_map.items():
    print(key,' : ', value)


   '''
affectnet

0: Neutral,
1: Happiness,
2: Sadness,
3: Surprise,
4: Fear,
5: Disgust,
6: Anger,
7: Contempt,
8: None,
9: Uncertain,
10: No-Face

FER13
 (0=Angry, 1=Disgust, 2=Fear, 3=Happy, 4=Sad, 5=Surprise, 6=Neutral).
 0-->6
 1-->3
 2-->4
 3-->5
 4-->2
 5-->1
 6-->0

'''

Error is:

Index(['subDirectory_filePath', 'expression'], dtype='object')
Traceback (most recent call last):
  File "/Users/mona/anaconda/lib/python3.6/site-packages/pandas/core/series.py", line 778, in _set_with_engine
    self.index._engine.set_value(values, key, value)
  File "pandas/_libs/index.pyx", line 116, in pandas._libs.index.IndexEngine.set_value
  File "pandas/_libs/index.pyx", line 124, in pandas._libs.index.IndexEngine.set_value
  File "pandas/_libs/index.pyx", line 154, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 1210, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 1218, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 0

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/mona/anaconda/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 2442, in get_loc
    return self._engine.get_loc(key)
  File "pandas/_libs/index.pyx", line 132, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 154, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 1210, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 1218, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 0

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/mona/anaconda/lib/python3.6/site-packages/pandas/core/series.py", line 719, in setitem
    self._set_with_engine(key, value)
  File "/Users/mona/anaconda/lib/python3.6/site-packages/pandas/core/series.py", line 781, in _set_with_engine
    values[self.index.get_loc(key)] = value
  File "/Users/mona/anaconda/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 2444, in get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))
  File "pandas/_libs/index.pyx", line 132, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 154, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 1210, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 1218, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 0

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/mona/CS585/project/affnet/emotion_map.py", line 17, in <module>
    df['expression'][i] = 3
  File "/Users/mona/anaconda/lib/python3.6/site-packages/pandas/core/series.py", line 771, in __setitem__
    setitem(key, value)
  File "/Users/mona/anaconda/lib/python3.6/site-packages/pandas/core/series.py", line 728, in setitem
    values[key] = value
IndexError: index 0 is out of bounds for axis 0 with size 0

Process finished with exit code 1

A few lines of the cvs is:

,subDirectory_filePath,expression
0,689/737db2483489148d783ef278f43f486c0a97e140fc4b6b61b84363ca.jpg,1
1,392/c4db2f9b7e4b422d14b6e038f0cdc3ecee239b55326e9181ee4520f9.jpg,0
2,468/21772b68dc8c2a11678c8739eca33adb6ccc658600e4da2224080603.jpg,0
3,944/06e9ae8d3b240eb68fa60534783eacafce2def60a86042f9b7d59544.jpg,1
4,993/02e06ee5521958b4042dd73abb444220609d96f57b1689abbe87c024.jpg,8
like image 407
Mona Jalal Avatar asked Dec 02 '17 00:12

Mona Jalal


People also ask

How do I fix pandas KeyError?

How to Fix the KeyError? We can simply fix the error by correcting the spelling of the key. If we are not sure about the spelling we can simply print the list of all column names and crosscheck.

What is a KeyError in pandas?

Pandas KeyError. In most cases, think of 'key' as the same as 'name.' Pandas is telling you that it can not find your column name. The preferred method is to *make sure your column name is in your dataframe.*

Why is pandas not recognizing column name?

This error occurs when you attempt to access some column in a pandas DataFrame that does not exist. Typically this error occurs when you simply misspell a column names or include an accidental space before or after the column name.


2 Answers

I think this error comes from your [i] notation, which is trying to look for the DataFrame index value of 0, which doesn't exist. Try replacing every instance of [i] with .iloc[i].

Also, you should be able to replace the for loop with much more compact, readable, and less error-prone code, especially since you define emotion_map but use it only for output. Try changing the mapping from strings to integers with emotion_map = { 0:6, 1:3, 2:4, 3:5, 4:2, 5:1, 6:0}, then move it to just under filtered_csv = ..., and replace that for loop with

filtered_csv['expression'] = filtered_csv['expression'].replace(emotion_map)
like image 57
Peter Leimbigler Avatar answered Oct 12 '22 19:10

Peter Leimbigler


Pandas Dataframe should always be used with iloc as it does not support to indexing with 0. I faced the same issue when there was only single element & I was trying to access that single element by prefixing 0......

like image 28
Abhishek Jain Avatar answered Oct 12 '22 19:10

Abhishek Jain