熊猫:为什么在某些情况下我会得到不同的格式编号?

时间:2018-08-27 11:34:02

标签: python pandas numpy dataframe

我有一个熊猫数据框df,其中包含nan和字符串为_MISSING。我想将值nan_MISSING设置为等于-1

df   A       B
0    4   _MISSING
1   NaN    hello
2    3      tom
3   NaN  _MISSING

这就是我在做什么:

df.ix[df.A.isnull(), 'A'] = -1
df.ix[df.B == '_MISSING', 'B'] = -1

这是结果

df   A       B
0    4      -1
1  -1.0    hello
2    3     tom
3  -1.0     -1

其中

type(df.A[0])
numpy.float64

type(df.B[0])
int

2 个答案:

答案 0 :(得分:0)

Pandas将所有带有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'>

答案 1 :(得分:0)

您可以将B中的选定值替换为np.nan,然后使用pd.DataFrame.fillna

import numpy as np

df.loc[df['B'] == '_MISSING', 'B'] = np.nan
df = df.fillna(-1)

print(df)

   df    A      B
0   0  4.0     -1
1   1 -1.0  hello
2   2  3.0    tom
3   3 -1.0     -1