熊猫:替换字符串列值

时间:2018-09-30 16:50:46

标签: python string pandas

我有一个熊猫数据框,其中包含我要格式化的费用列。基本上,替换字符串并将其标准化是因为成本值是从不同来源获取的。还有一些'NaN'

以下是一些示例数据:

$2.75 
nan
4.150000
25.00
$4.50

我有以下代码用于标准化列中的值格式。

for i in range(len(EmpComm['Cost(USD)'])):

    if (pd.isnull(EmpComm['Cost(USD)'][i])):
        print(EmpComm['Cost(USD)'][i], i)
        #EmpComm['Cost(USD)'] = EmpComm['Cost(USD)'].iloc[i].fillna(0, inplace=True)

    if type(EmpComm['Cost(USD)'].iloc[i]) == str:
       #print('string', i)
       EmpComm['Cost(USD)'] = EmpComm['Cost(USD)'].iloc[i].replace('$','')

输出:

0      2.75
1      2.75
2      2.75
3      2.75
4      2.75
5      2.75

所有值均置于2.75。由于所有列值都被格式化为字符串,因此它正在运行第二个if语句。

我的问题是:您将如何格式化?

1 个答案:

答案 0 :(得分:2)

通常,您应该避免手动进行for循环,并在可能的情况下对Pandas使用矢量化功能。在这里,您可以利用pd.to_numeric来测试和转换系列中的值:

s = pd.Series(['$2.75', np.nan, 4.150000, 25.00, '$4.50'])

strs = s.astype(str).str.replace('$', '', regex=False)
res = pd.to_numeric(strs, errors='coerce').fillna(0)

print(res)

0     2.75
1     0.00
2     4.15
3    25.00
4     4.50
dtype: float64