我有一个 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 语句,因为它们被格式化为字符串。
我的问题是:你会如何格式化它?
最佳答案
一般来说,您应该避免手动 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
关于python - Pandas : Replace string column values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52580052/