Извлечение суммы в долларах США - PullRequest
3 голосов
/ 19 июня 2020

Этот вопрос задавали раньше, но я все еще не могу полностью выполнить эту работу. У меня есть следующие примеры строк:

"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) под названием «доллары»

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-

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Вы можете использовать

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

См. демонстрацию регулярных выражений

Подробности

  • \$? - необязательный $ char
  • (?<!\d) - убедитесь, что слева нет di git
  • (?:\d{1,3}(?:,\d{3})*|\d{4,})? - любой из двух шаблонов:
    • \d{1,3}(?:,\d{3})* - от 1 до 3 цифр, за которыми следует 0 или более вхождений запятой и трех цифр
    • | - или
    • \d{4,} - четыре или более цифр
  • \.? - необязательная точка
  • \d+ - 1+ цифр.
1 голос
/ 19 июня 2020

Вы можете использовать:

(?<!\S)\$?(?:\d{1,3}(?:\,\d{3})*)?\.\d{2}-?(?!\S)
  • (?<!\S) Граница пробела слева
  • \$? Необязательный знак доллара
  • (?:\d{1,3}(?:\,\d{3})*)? Необязательная часть соответствие 1-3 цифры, необязательно повторение через запятую и 3 цифры
  • \.\d{2} Соответствие . и 2 цифры
  • -? Необязательный дефис
  • (?!\S) Пробел граница справа

Regex demo

Если вы хотите, чтобы после точки было 1+ цифр, замените \.\d{2} на \.\d+

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...