如何在dataframe中进行多次替换?

2024-09-29 21:29:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码如下:

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

strs =  s.astype(str).str.replace("$", "").replace("k", "").replace("g", "")
#strs = s.astype(str).str.replace({'\$': '', ',': ''}, regex=True)
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
5     876
6     67.3

但实际上,第5行和第6行的结果是零

请帮忙指出错误。我感谢你的建议


Tags: to代码truenpresnanreplaceregex
3条回答

replace代码中使用regex=True,如下所示

s = pd.Series(['$2.75', np.nan, 4.150000, 25.00, '$4.50','k876','g67.3'])
strs =  s.astype(str).str.replace("$", "", regex=True).replace("k", "", regex=True).replace("g", "", regex=True)
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
5    876.00
6     67.30
dtype: float64

另一种解决方案是使用带有模式([\d\.]+)(一个或多个连续数字或.)的^{}

res = pd.to_numeric(s.astype(str).str.extract(r'([\d\.]+)')[0], errors='coerce').fillna(0)

[外]

0      2.75
1      0.00
2      4.15
3     25.00
4      4.50
5    876.00
6     67.30
Name: 0, dtype: float64

另一种方法是使用str.stripstr.lstrip

Ex:

s = pd.Series(['$2.75', np.nan, 4.150000, 25.00, '$4.50','k876','g67.3'])
strs =  s.astype(str).str.strip("$kg")
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
5    876.00
6     67.30
dtype: float64

相关问题 更多 >

    热门问题