我有一个熊猫数据框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
答案 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