使用 pandas 的 fillna() 输入 NaN 将 dtype 从 float 更改为 object

Imputing NaNs using pandas's fillna() changes the dtype from float to object

所以我正在为缺失值估算我的一些列。这些列是数字数据类型(浮点数和整数) 一旦我使用 fillna() 和均值等来估算缺失值,列的 dtype 就会从 float 更改为 object。 我希望它保持浮动。并发现重做所有 dtypes 有点低效。 请帮我解决这个问题。

这是一个例子。

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))

After imputation, the dtype is dtype('O')

请注意,这只是我在此处创建的示例。我正在处理一个大型数据集,并计划用不同的插补来插补多个列。因此,请提出有助于一次处理多列的解决方案。

P.S。我发现部署 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')