替换“?” 与南或零

Geo*_*rge 1 python pandas

我的数据中有一个是:

Power:
0     130
1     165
2     150
3     150
4     ?
5     198
6     220
7     215
8     225
9     ?
10    170
Run Code Online (Sandbox Code Playgroud)

我想替换每个'?' 用Nan或零。

我试过了:

data['Power'].str.replace('?', 0).astype(float)
data['Power'].str.replace('^[^\d]*', '').astype(float)
data['Power'].replace(r'\s+', np.nan, regex=True)
data['Power'].convert_objects(convert_numeric=True)
data['Power'].replace(regex=True,inplace=True,to_replace=r'\D',value=r'')
Run Code Online (Sandbox Code Playgroud)

但是这些都不起作用!

有些会产生错误,could not convert string to float而有些则不会产生任何错误,但不会更改'?'。

jez*_*ael 5

如果需要只替换所有非数字值以NaN使用to_numeric

data.Power = pd.to_numeric(data.Power, errors='coerce')
print (data)
    Power
0   130.0
1   165.0
2   150.0
3   150.0
4     NaN
5   198.0
6   220.0
7   215.0
8   225.0
9     NaN
10  170.0
Run Code Online (Sandbox Code Playgroud)

如果需要,0fillna使用强制类型转换添加到int

data.Power = pd.to_numeric(data.Power, errors='coerce').fillna(0).astype(int)
print (data)
    Power
0     130
1     165
2     150
3     150
4       0
5     198
6     220
7     215
8     225
9       0
10    170
Run Code Online (Sandbox Code Playgroud)