python - 提取美元金额

标签 python regex pandas dataframe match

以前有人问过这个问题,但我仍然无法完全解决这个问题。我有以下字符串示例:

"Transfer to Retirement Rsvs-MA FX                   .11"                
"Opening Balance                FX        342,536,002.63"     
"VA                 85.85"               
"VB                   .00"     
"Manual Adjustment              FX              6,838.36-"

我想将字符串中的美元/美分金额提取到数据框的单独列中。我有以下正则表达式:

rx = (r"(\$?(?:\d+,)*\d+\.\d+\-?)")

我尝试在数据框 (df) 中创建一个名为“dollars”的列

df2['dollars']=df2['description'].str.extract(rx)

除了像 .11 或 .00 这样的值,它在大多数情况下都有效,在这种情况下会返回 nan。我如何修改此表达式以使其在不带前导美元的情况下适用于美分?

非常感谢您的帮助!

string                                                       dollars
Transfer to Retirement Rsvs-MA FX                   .11      0.11
Opening Balance                FX        342,536,002.63      342,536,002.63
VA                    85.85                                  85.85
VB                   .00                                     .00
Manual Adjustment FX 6,838.36-                               6,836-

最佳答案

你可以使用

r'\$?(?<!\d)(?:\d{1,3}(?:,\d{3})*|\d{4,})?\.?\d+'

参见 regex demo

详情

  • \$? - 一个可选的 $字符
  • (?<!\d) - 确保左边没有数字
  • (?:\d{1,3}(?:,\d{3})*|\d{4,})? - 两种模式之一:
    • \d{1,3}(?:,\d{3})* - 1 到 3 位数字后跟 0 次或多次出现的逗号和三位数字
    • | - 或者
    • \d{4,} - 四位数或更多位数
  • \.? - 一个可选的点
  • \d+ - 1 个以上数字。

关于python - 提取美元金额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62474390/

相关文章:

python - 如何从 Pandas 的 YYYY-YY 格式列中提取去年 (YYYY)

python - 无法将关键字 'i' 解析为字段。选择是 : id, joined_on, user, user_id

regex - 在一个Perl正则表达式中组合不同的大小写规则

regex - 如何动态构建 Perl 正则表达式?

python - pandas to_datetime 无法按预期工作

python - 性能:Matlab 与 Python

python - 多行字符串连接和写入文本文件

javascript - 使用正则表达式替换字符串的一部分

python - 将 pandas 偏移量转换为 python 日期

python - 删除除具有特定条件的行之外的所有行