所以我要为缺失的值输入我的一些列。列为数值型(float和integer)。一旦我使用fillna()和mean等来计算缺失的值,列的dtype就从float更改为object。我想让它保持浮动状态。我发现重做所有的dtype有点低效。请帮我一下。
下面是一个例子。
ser_original = pd.Series([1.0, 2.0, np.nan, 4.0, 5.0], dtype=float)
ser_imputed = ser_original.fillna(np.mean)
print('After imputation, the dtype is {}'.format(ser_imputed.dtype))
代入后,dtype为dtype('O')
请注意,这只是我在这里创建的一个示例。我正在使用大型数据集,并计划用不同的imputation来推算多列。因此,请建议解决方案,帮助处理多个列一次。
注:我发现部署for循环有点幼稚。如果我说错了,请评论。
这是因为您使用的是函数而不是值
ser_original = pd.Series([1.0, 2.0, np.nan, 4.0, 5.0], dtype=float)
ser_imputed = ser_original.fillna(np.mean)
print(ser_imputed)
0 1.0
1 2.0
2 <function mean at 0x000002BCA05020D0>
3 4.0
4 5.0
dtype: object
用平均值代替,效果很好
ser_imputed = ser_original.fillna(ser_original.mean())
print(ser_imputed)
0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
dtype: float64
print(ser_imputed.dtype)
# dtype('float64')
如果您有一个数据帧,您可以通过使用fillna()
作为
df.fillna(df.mean())
,其中每一列的NaN将被该列的平均值所取代。