Панды бросают любые целочисленные столбцы с NaN
для плавания.
>>> df = pd.DataFrame({'a':[1,2,np.nan], 'b':['_MISSING', 'HELLO','World']})
>>> df.ix[df.a.isnull(), 'a'] = -1
>>> type(df.a[0])
<class 'numpy.float64'>
, тогда как, если вы замените значение в нечисловом столбце, например
>>> df.ix[df.b == '_MISSING', 'b'] = -1
>>> type(df.b[0])
<class 'int'>
Pandas преобразует его в int, и если вы замените его на число с плавающей точкой, сделайте это явно, -1.0
.
>>> df.ix[df.b == '_MISSING', 'b'] = -1.0
>>> type(df.b[0])
<class 'float'>