Удалить запятую только из разделителей чисел (группировка регулярных выражений) - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть столбец с альфа-цифрой c строка в pandas кадре данных. Цель состоит в том, чтобы удалить только запятую из разделителей чисел. Например:

Hello, world! -> Hello, world!

, но

Warhammer 40,000 -> Warhammer 40000
Codename 1,337 -> Codename 1337

Я могу сделать вывод, что только когда обе стороны являются цифрами '[0-9] +, [0-9] +' я хочу убрать запятую. Тем не менее, я не могу найти способ сохранить те же цифры. Может ли кто-нибудь помочь? Если это связано, размер фрейма данных составляет несколько сотен тысяч строк, а средняя строка составляет около 100 слов.

ps это мой первый пост. Я попытался найти связанную проблему, но не нашел ни одной. Engli sh не моя мать, скорее всего, я мог пропустить ключевое слово для этой проблемы. Пожалуйста, свяжите меня с нужным местом, если это произойдет. Большое спасибо и высоко ценим:)

Обновление: добавлено ключевое слово «группировка» в качестве напоминания для меня.

Ответы [ 6 ]

2 голосов
/ 20 февраля 2020

вам нужно захватить цифры в группу (\d+),(\d+)

import re

items = ['Hello, world!', 'Warhammer 40,000', 'Codename 1,337']

for item in items:
  item = re.sub(r'(\d+),(\d+)', r'\1\2', item)
  print(item)

Результаты:

Hello, world!
Warhammer 40000
Codename 1337
1 голос
/ 20 февраля 2020

Вы можете использовать Pandas 'str.replace() с регулярным выражением:

import pandas as pd

data = [
    "Hello, world!",
    "Warhammer 40,000",
    "Codename 1,337",
    "Total USD 1,27",
    "1,080,000,000 kilometers per hour"
]

df = pd.DataFrame(data, columns=["title"])
df["title"] = df["title"].str.replace(",(\d{3})", "\\1")
df

, что дает

    title
0   Hello, world!
1   Warhammer 40000
2   Codename 1337
3   Total USD 1,27
4   1080000000 kilometers per hour

0 голосов
/ 20 февраля 2020
import re
str = 'hello, world! 40,000 and 50,000!'
str = re.sub(r'(\d+),(\d+)', r'\1\2', str)
0 голосов
/ 20 февраля 2020

Используя @uingtea regex, но для pandas dataframe вы можете сделать это следующим образом:

import pandas as pd
import re

df = pd.DataFrame({'col':['Hello, world!', 'Warhammer 40,000', 'Codename 1,337']})
df['col'] = df['col'].apply(lambda x: re.sub(r'(\d+),(\d+)', r'\1\2', x))
0 голосов
/ 20 февраля 2020

Я думаю, это то, что вам нужно. пожалуйста, смотрите ниже скриншот

enter image description here

0 голосов
/ 20 февраля 2020

Использование регулярных выражений и ванили python это может помочь:

import re

def convert_commas(old):

    new = []
    pattern = re.compile(r"\d+,\d+")
    for word in old.split():
        if re.findall(pattern, word):
            word = word.replace(',','')
        new.append(word)

    new = (" ").join(new)
    return new

print(convert_commas(old))

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

...