Изменение строки в Pandas при сохранении переменной

1

Мои данные в Pandas (df ['case']) содержат два способа обращения к сумме денег в долларах США:

  • Он заплатил 500 долларов США за ПК.
  • Он заплатил 500 долларов за ПК.
  • Сделка была совершена в долларах США и в евро.

Разница в Blank. Теперь я хотел бы заменить "доллар" на "доллар", но только если за долларом США следует число - при сохранении номера.

df['case'] = df['case'].str.replace('USD ', 'USD', re.IGNORECASE)

не будет работать, поскольку в него также будут включены экземпляры, в которых за ним не следует число (см. третий пример).

df['case'] = df['case'].str.replace('USD (\d+)', 'USD', re.IGNORECASE)

Это будет соответствовать только случаям, в которых за ним следует число, но также заменяет номер. Есть ли способ сказать ему, чтобы найти переменную, а затем заменить все, кроме переменной? В принципе:

df['case'] = df['case'].str.replace('USD (\d+)', 'USD(\d+)', re.IGNORECASE)

были вторыми (\ d+) не взяты буквально, а как место для числа от ранее, которое будет здесь снова вставлено.

Я также пробовал:

for row in df['case'].str.contains('USD (\d+), re.IGNORECASE):
   df['case'] = df['case'].str.replace('USD ', 'USD', re.IGNORECASE)

Последний не работал для повторения строк и выполнял только изменения в строке, содержащей строку. Решение для последнего могло бы помочь в решении других проблем.

Теги:
pandas

1 ответ

1
Лучший ответ

использование

(?i)USD\s+(?=\d)

подробности

  • (?i) - разрешить регистр без учета регистра
  • USD - буквальный USD
  • \s+ - символы 1+ whitespace
  • (?=\d) - (чтобы убедиться, что следующий знак должен быть цифрой, которая не будет добавлена к значению соответствия и, следовательно, не будет заменена.

В Пандах:

df['case'] = df['case'].str.replace(r'(?i)USD\s+(?=\d)', 'USD')

См. Демо-версию regex

Если вам нужно удержать USD в своем первоначальном случае, используйте

df['case'] = df['case'].str.replace(r'(?i)(USD)\s+(?=\d)', r'\1')

то есть захватить USD в группу захвата, а затем использовать \1 backreference/placeholder, ссылаясь на это значение группы из шаблона замены строки.

  • 1
    Работает как шарм. Спасибо!
  • 1
    Я уже сделал, но, к сожалению, это не считается, потому что у меня слишком мало репутации :(. Они сказали, что посчитают это внутренне, хотя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню