【发布时间】:2018-08-01 06:46:23
【问题描述】:
我正在尝试使用 Panda 库的 'loc' 函数在我的数据集中的一列中估算缺失值,但代码未成功执行。该行代码如下。
# Impute missing data by mean weight of each sub-category in 'Item_Weight' column
data.loc[miss_bool,'Item_Weight'] = data.loc[miss_bool,'Item_Identifier'].apply(lambda x: item_avg_weight[x])
正在生成的错误如下,
data.loc[miss_bool,'Item_Weight'] = data.loc[miss_bool,'Item_Identifier'].apply(lambda x: item_avg_weight[x])
Traceback (most recent call last):
File "<ipython-input-3-168be6231060>", line 1, in <module>
data.loc[miss_bool,'Item_Weight'] = data.loc[miss_bool,'Item_Identifier'].apply(lambda x: item_avg_weight[x])
File "C:\Users\Arnab\Anaconda3\lib\site-packages\pandas\core\series.py", line 3192, in apply
mapped = lib.map_infer(values, f, convert=convert_dtype)
File "pandas/_libs/src\inference.pyx", line 1472, in pandas._libs.lib.map_infer
File "<ipython-input-3-168be6231060>", line 1, in <lambda>
data.loc[miss_bool,'Item_Weight'] = data.loc[miss_bool,'Item_Identifier'].apply(lambda x: item_avg_weight[x])
File "C:\Users\Arnab\Anaconda3\lib\site-packages\pandas\core\frame.py", line 2685, in __getitem__
return self._getitem_column(key)
File "C:\Users\Arnab\Anaconda3\lib\site-packages\pandas\core\frame.py", line 2692, in _getitem_column
return self._get_item_cache(key)
File "C:\Users\Arnab\Anaconda3\lib\site-packages\pandas\core\generic.py", line 2486, in _get_item_cache
values = self._data.get(item)
File "C:\Users\Arnab\Anaconda3\lib\site-packages\pandas\core\internals.py", line 4115, in get
loc = self.items.get_loc(item)
File "C:\Users\Arnab\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 3065, in get_loc
return self._engine.get_loc(self._maybe_cast_indexer(key))
File "pandas\_libs\index.pyx", line 140, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\index.pyx", line 162, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\hashtable_class_helper.pxi", line 1492, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas\_libs\hashtable_class_helper.pxi", line 1500, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'FDP10'
我观察到错误跟踪的最后一行显示 'KeyError : 'FDP10'。
FDP10 正是 'Item_Identifier' 列中 'Item_Weight' 列中对应单元格为空白的第一个值( aka 有一个缺失值)。
因此,该代码命中的第一个空白列似乎无法用替换值替换该空白列。
我发现的另一个代码是,
data.loc[miss_bool,'Item_Weight'] = data.loc[miss_bool,'Item_Identifier'].apply(lambda x: item_avg_weight.at[x,'Item_Weight'])
这个替代代码背后的逻辑在我看来也是合理的。但我的问题是原始代码有什么问题?
如果您需要任何其他信息,请告诉我,我会提供相同的信息!
【问题讨论】:
-
你检查你的miss_bool数组的内容了吗?因为它可能包含那个 'FDP10' 值
-
@m33n miss_bool 数组(我宁愿说向量,因为它只有一列)包含真假数据。对于原始数据集文件“data”中的每个条目,如果记录行在其“Item_Weight”列中缺少值,则在 miss_bool 向量中,对应于该索引的行具有“true”值,否则为“false”。我希望这会有所帮助! :)
标签: python pandas machine-learning