我想仅修改数据框中的数值变量,即通过中位数填补数值变量的缺失值,通过众数填补因子变量的缺失值。为了仅修改数值变量,我尝试了以下方法:
xTrain.select_dtypes(include=numerics) = xTrain.select_dtypes(include=numerics).fillna(xTrain.mean(), inplace=True)
但它显示:
SyntaxError: can’t assign to function call
事实上,这个解决方案确实有效,但我对此并不满意,因为它不涉及赋值操作(’=’)。此外,这是一个“私有方法”(即实现细节),未来可能会更改或完全删除。在此答案中建议谨慎使用:
xTrain._get_numeric_data().fillna(xTrain.mean(), inplace=True)
我在想是否有其他方法可以仅选择数值列并在整个数据中进行填补,意思是仅修改数据框的一部分?提前感谢!
回答:
您可以使用DataFrame.select_dtypes
获取所有列,这样赋值操作会很顺利:
xTrain = pd.DataFrame({'address':['a', 'b', 'c'],'b':[1,2, np.nan]})print (xTrain) address b0 a 1.01 b 2.02 c NaNcols = xTrain.select_dtypes(include=np.number).columnsxTrain[cols] = xTrain[cols].fillna(xTrain.mean())print (xTrain) address b0 a 1.01 b 2.02 c 1.5