熊猫 - KeyError异常:“不能用一个单一的布尔索引到setitem”

我写了下面的功能。当调用它时,它将抛出KeyError为dataset.loc[]调用。我想了解为什么会发生这种情况,以及如何避免这种情况发生。熊猫 - KeyError异常:“不能用一个单一的布尔索引到setitem”

def ChangeColumnValues(dataset, columnValues): 

"""Changes the values of given columns into the given key value pairs

:: Argument Description ::

dataset - Dataset for which the values are to be updated

columnValues - Dictionary with Column and Value-Replacement pair

"""

for column, valuePair in columnValues.items():

for value, replacement in valuePair.items():

dataset.loc[str(dataset[column]) == value, column] = replacement

return dataset

BankDS = da.ChangeColumnValues(BankDS, {

'Default': {

'no': -1,

'yes': 1

},

'Housing': {

'no': -1,

'yes': 1

},

'Loan': {

'no': -1,

'yes': 1

},

'Y': {

'no': 0,

'yes': 1

}

})

错误:

--------------------------------------------------------------------------- 

KeyError Traceback (most recent call last)

<ipython-input-20-0c766179be88> in <module>()

30 WineQualityDS = da.MeanNormalize(WineQualityDS)

31

---> 32 PreProcessDataSets()

<ipython-input-20-0c766179be88> in PreProcessDataSets()

20 'Y': {

21 'no': 0,

---> 22 'yes': 1

23 }

24 })

W:\MyProjects\Python\ML\FirstOne\DAHelper\DataSet.py in ChangeColumnValues(dataset, columnValues)

73 for column, valuePair in columnValues.items():

74 for value, replacement in valuePair.items():

---> 75 dataset.loc[str(dataset[column]) == value, column] = replacement

76

77 return dataset

C:\Program Files\Anaconda3\lib\site-packages\pandas\core\indexing.py in __setitem__(self, key, value)

177 key = com._apply_if_callable(key, self.obj)

178 indexer = self._get_setitem_indexer(key)

--> 179 self._setitem_with_indexer(indexer, value)

180

181 def _has_valid_type(self, k, axis):

C:\Program Files\Anaconda3\lib\site-packages\pandas\core\indexing.py in _setitem_with_indexer(self, indexer, value)

310 # reindex the axis to the new value

311 # and set inplace

--> 312 key, _ = convert_missing_indexer(idx)

313

314 # if this is the items axes, then take the main missing

C:\Program Files\Anaconda3\lib\site-packages\pandas\core\indexing.py in convert_missing_indexer(indexer)

1963

1964 if isinstance(indexer, bool):

-> 1965 raise KeyError("cannot use a single bool to index into setitem")

1966 return indexer, True

1967

KeyError: 'cannot use a single bool to index into setitem'

也请让我知道如果有什么更好/右的方式来实现我试图实现与ChangeColumnValues功能

回答:

我得到了答案后,很少挖掘(谷歌搜索)和头脑风暴的问题。以下是校正功能:

def ChangeColumnValues(dataset, columnValues): 

"""Changes the values of given columns into the given key value pairs

:: Argument Description ::

dataset - Dataset for which the values are to be updated

columnValues - Dictionary with Column and Value-Replacement pair

"""

for column, valuePair in columnValues.items():

for value, replacement in valuePair.items():

dataset.loc[dataset[column] == value, column] = replacement

return dataset

注意,我已删除从中引起键dataset.loc作为标布尔值,而不是一系列的值,这里需要以指向比较str()目标系列中每个值的结果条件。所以通过删除str()它导致了一个布尔序列,这是我们整个工作所需要的。

我是新来的蟒蛇,如果我的理解是错在这里,请大家指正!

编辑:

至于建议的@JohnE,我试图实现,也可以使用熊猫replace()方法很容易做到的功能。我正在推出相应的实施,因为它可以帮助某人:

BankDS = BankDS.replace({ 

'Default': {

'no': -1,

'yes': 1

},

'Housing': {

'no': -1,

'yes': 1

},

'Loan': {

'no': -1,

'yes': 1

},

'Y': {

'no': 0,

'yes': 1

}

})

以上是 熊猫 - KeyError异常:“不能用一个单一的布尔索引到setitem” 的全部内容, 来源链接: utcz.com/qa/257958.html

回到顶部