Мои данные в Pandas (df ['case']) содержат два способа обращения к сумме денег в долларах США:
Разница в 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)
Последний не работал для повторения строк и выполнял только изменения в строке, содержащей строку. Решение для последнего могло бы помочь в решении других проблем.
использование
(?i)USD\s+(?=\d)
подробности
(?i)
- разрешить регистр без учета регистраUSD
- буквальный USD
\s+
- символы 1+ whitespace(?=\d)
- (чтобы убедиться, что следующий знак должен быть цифрой, которая не будет добавлена к значению соответствия и, следовательно, не будет заменена.В Пандах:
df['case'] = df['case'].str.replace(r'(?i)USD\s+(?=\d)', 'USD')
Если вам нужно удержать USD
в своем первоначальном случае, используйте
df['case'] = df['case'].str.replace(r'(?i)(USD)\s+(?=\d)', r'\1')
то есть захватить USD
в группу захвата, а затем использовать \1
backreference/placeholder, ссылаясь на это значение группы из шаблона замены строки.