regex 捕获类似字符串的价格的第一次出现[重复]

gajydyqb  于 2023-03-04  发布在  其他
关注(0)|答案(1)|浏览(124)
    • 此问题在此处已有答案**:

Pandas dataframe: Extracting float values from string in a column(2个答案)
3天前关闭。
截至3天前,社区正在审查是否重新讨论此问题。
我有以下系列

s = pd.Series({0: 'R$ 3,74\n-10%\nR$ 4,15',
 1: 'R$ 12,25',
 2: 'R$ 14,65',})

我想做的是提取当前格式的数字,然后用','替换".",这样我就可以转换为浮点值。不幸的是,我的当前捕获组遇到了麻烦,它基本上是无限次地捕获遵循该格式(number,number)的所有内容。包括第一个字符串。

(\d+\.?\,?\d*)

我想限制我的捕捉组,只捕捉第一次发生的这样的事件。我会欣赏其他方法的太。
所需结果如下:

s = pd.Series({0:3.74,
1:12.25,
2:14.65})
c3frrgcw

c3frrgcw1#

您可以使用:

s.str.extract('(\d+,?\d*)', expand=False).str.replace(',', '.').astype(float)

或者:

import re
s.str.replace('.*(\d+),(\d+).*', r'\1.\2', regex=True, flags=re.DOTALL
              ).astype(float)

输出:

0     3.74
1    12.25
2    14.65
dtype: float64
计时

在30万个项目上:

s.str.extract('(\d+,?\d*)', expand=False).str.replace(',', '.').astype(float)
# 206 ms ± 7.77 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

s.str.replace('.*(\d+),(\d+).*', r'\1.\2', regex=True, flags=re.DOTALL).astype(float)
# 607 ms ± 34.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

相关问题