我的数据有一个coluknn:
Power:
0 130
1 165
2 150
3 150
4 ?
5 198
6 220
7 215
8 225
9 ?
10 170
我希望更换每一个'?'与楠或零。
我试过了:
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'')
但这些都不起作用!
有些会产生错误could not convert string to float
,而有些错误却没有产生任何错误,但没有改变'?'。
答案 0 :(得分:4)
如果需要,请仅将所有非数字值替换为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
如果需要0
,请将fillna
添加到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
答案 1 :(得分:1)
# to replace with 0
df.Power = df.Power.replace(to_replace='?', value = 0)
# to replace with NaN
import numpy as np
df.Power = df.Power.replace(to_replace='?', value = np.nan)
答案 2 :(得分:1)
您也可以尝试这样做:
data['Power'].apply(lambda s: eval(str(s).replace('?', '0')))
答案 3 :(得分:1)
import pandas as pd
df = pd.DataFrame({
'Power':[130,165,150,'?',198,220,215,225,'?',170]
})
df.where(df.Power != '?', 0)
输出:
Power
0 130
1 165
2 150
3 0
4 198
5 220
6 215
7 225
8 0
9 170
df.where(df.Power != '?', 'foo')
输出
Power
0 130
1 165
2 150
3 foo
4 198
5 220
6 215
7 225
8 foo
9 170
几乎适用于任何事情,它在文档中说它很快。 The where() Method and Masking