我试图使用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'])
这个替代代码背后的逻辑在我看来也很合理。但是我的问题是原始代码有什么问题?
如果您需要其他任何信息,请与我联系!
答案 0 :(得分:0)
在进行分析时,发现火车数据集中有4个产品的缺失值占一行,因此可能的解决方案是引用包含4个缺失产品的项目权重的测试数据集。
答案 1 :(得分:0)
这与使用pivot_table有关
去:
item_avg_weight = df.groupby('Item_Identifier').mean()['Item_Weight']
代替:
item_avg_weight = df.pivot_table(values='Item_Weight', index='Item_Identifier')
因此,您不必使用at函数,然后只需编写:
df.loc[miss_bool,'Item_Weight'] = df.loc[miss_bool,'Item_Identifier'].apply(lambda x: item_avg_weight[x])