Преобразовать текстовую строку K & M в 10 ^ 3 & 10 ^ 6 - PullRequest
1 голос
/ 14 мая 2019

У меня есть фрейм данных со значениями столбцов -

[Themangoescosts$1K]
[needtopay20K,10Kdollarsmakesagrand]

Мне нужно конвертировать K - 10 ^ 3

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

Использовал приведенное ниже регулярное выражение для определения случаев K & M -

match = re.search("[\d.]+[KM]+", row)

И планируется использовать ниже для замены предметов -

mp = {'K':' * 10**3', 'M':' * 10**6'}
df2['c'] = pd.eval(df2.offer2.replace(mp.keys(), mp.values(), regex=True).str.replace(r'[\d.]+[KM]+',''))

Что приводит к ошибке -

UndefinedVariableError: name 'nan' is not defined

Ожидаемый результат -

[Themangoescosts$1000]
[needtopay20000,10000dollarsmakesagrand]

1 Ответ

0 голосов
/ 24 мая 2019

Я предлагаю использовать

df['c'] = df['offer2'].str.replace(r'(?<!\d)(\d{1,3})([KM])', lambda x: '{}000'.format(x.group(1)) if x.group(2) == 'K' else '{}000000'.format(x.group(1)) )

Суть в том, что вы можете использовать вызываемый элемент в качестве аргумента замены при использовании Series.str.replace.

Описание регулярного выражения

  • (?<!\d) - слева от текущего местоположения не допускается никакая цифра
  • (\d{1,3}) - группа 1: от одной до трех цифр
  • ([KM]) - группа2: L или M.

Замена lambda x: '{}000'.format(x.group(1)) if x.group(2) == 'K' else '{}000000'.format(x.group(1)) либо заменяется на Группу 1 + 000, если значение Группы 2 равно K, в противном случае Группа 1 с 000000 добавлено к нему используется.

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