2017-12-02 18 views
0

感情をあるデータセットから別のデータセットにマップし、現在のデータセット内の6より大きいすべてを削除しようとしています。このエラーをどのように修正する必要がありますか?pandas._libs.hashtable.PyObjectHashTable.get_item KeyError:0

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 

''' 

エラーは次のとおりです。

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 

CVSの数行は次のとおりです。

,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 

答えて

1

私はこのエラーがデータフレームを探すためにしようとしているあなたの[i]表記、から来ていると思いますインデックス値0は存在しません。 [i]のすべてのインスタンスを.iloc[i]に置き換えてください。

さらに、コンパクトで読みやすく、エラーが発生しにくいコードで置き換えることができます。特にemotion_mapを定義しているので、出力用にのみ使用する必要があります。ただfiltered_csv = ...の下に移動し、その後、emotion_map = { 0:6, 1:3, 2:4, 3:5, 4:2, 5:1, 6:0}で文字列から整数へのマッピングを変更してみてください、と

filtered_csv['expression'] = filtered_csv['expression'].replace(emotion_map) 
とその forループを置き換えます
関連する問題