替换'?'与楠或零

时间:2016-12-07 11:27:59

标签: python pandas

我的数据有一个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,而有些错误却没有产生任何错误,但没有改变'?'。

4 个答案:

答案 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