2017-09-03 14 views
1

セクションには、この機能は、ボタンウィジェットが押されたときに実行されるTypeError例外:非ハッシュタイプ:私の問題を引き起こしている私のコードの「Int64Index」

def Half_Increase(self): 
    self.keg_count=summer17.iloc[self.result_rows,2].values[0] 
    self.keg_count +=1 
    summer17[self.result_rows,2] = self.keg_count 
    print(keg_count) 

です。データフレーム内の特定のセルから値を取得し、その値に1を加え、新しい値をデータフレームに返します。 (私はこれはこれを行うための適切な方法であれば、完全にはわからない。)

私は、これは、変数の型が一致しないとは何かを持っていますが、推測している次のエラー

Exception in Tkinter callback 
Traceback (most recent call last): 

    File "C:\Python3.6\lib\tkinter\__init__.py", line 1699, in __call__ 
    return self.func(*args) 
    File "beerfest_program_v0.3.py", line 152, in Half_Increase 
    summer17[self.result_rows,2] = self.keg_count 
    File "C:\Python3.6\lib\site-packages\pandas\core\frame.py", line 2331, in __setitem__ 
    self._set_item(key, value) 
    File "C:\Python3.6\lib\site-packages\pandas\core\frame.py", line 2397, in _set_item 
    value = self._sanitize_column(key, value) 
    File "C:\Python3.6\lib\site-packages\pandas\core\frame.py", line 2596, in _sanitize_column 
    if broadcast and key in self.columns and value.ndim == 1: 
    File "C:\Python3.6\lib\site-packages\pandas\core\indexes\base.py", line 1640, in __contains__ 
    hash(key) 
    File "C:\Python3.6\lib\site-packages\pandas\core\indexes\base.py", line 1667, in __hash__ 
    raise TypeError("unhashable type: %r" % type(self).__name__) 
TypeError: unhashable type: 'Int64Index' 

を取得私は見て、これを改善する方法を見つけることができません。

答えて

1

私はあなたがilocが必要だと思う:

summer17.iloc[result_rows,2] += 1 

サンプル:

summer17 = pd.DataFrame({'a':[1,2,3], 
         'b':[3,4,5], 
         'c':[5,9,7]}) 
#if reselt_rows is scalar 
result_rows = 1 

print(summer17) 
    a b c 
0 1 3 5 
1 2 4 9 
2 3 5 7 

summer17.iloc[result_rows,2] += 1 
print(summer17) 
    a b c 
0 1 3 5 
1 2 4 10 
2 3 5 7 

それは同じです:

#get value 
keg_count=summer17.iloc[result_rows,2] 
#increment 
keg_count +=1 
#set value 
summer17.iloc[result_rows,2] = keg_count 
print(summer17) 
    a b c 
0 1 3 5 
1 2 4 10 
2 3 5 7 

しかしresult_rowslist1d arrayの場合:

result_rows = [1,2] 

#get all values per positions defined in result_rows 
#filter only first value by values[0] 
keg_count=summer17.iloc[result_rows,2].values[0] 
#increment 
keg_count +=1 
#set all values of result_rows by incremented value 
summer17.iloc[result_rows,2] = keg_count 
print(summer17) 
    a b c 
0 1 3 5 
1 2 4 10 
2 3 5 10 
+1

これは、私がやろうとしていたよりもずっと簡単です。 – jon

関連する問題