Используйте совпадающие группы в качестве аргументов в функции - PullRequest
1 голос
/ 05 октября 2019

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

#approximation
def conversion(one, two):
    print(one)
    return (int(one)*30 + float(int(two)*2.5))

df_test = df_dummies
df_test['Height'] = df_test['Height'].replace({r'(\w+)\+(\w+)' : conversion( r'\1' , r'\2' )}, regex=True).astype(float)

Я пробовал этоно соответствующие группы не работают

ошибка:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-189-d4278403d30f> in <module>
      5 
      6 df_test = df_dummies
----> 7 df_test['Height'] = df_test['Height'].replace({r'(\w+)\+(\w+)' : conversion( r'\1' , r'\2' )}, regex=True).astype(float)
      8 df_test.head().transpose()

<ipython-input-189-d4278403d30f> in conversion(one, two)
      2 def conversion(one, two):
      3     print(one)
----> 4     return (int(one)*30 + float(int(two)*2.5))
      5 
      6 df_test = df_dummies

ValueError: invalid literal for int() with base 10: '\\1'

, но если я делаю это:

#approximation
def conversion(one, two):
    print(one)
    return (int(one)*30 + float(int(two)*2.5))

df_test = df_dummies
df_test['Height'] = df_test['Height'].replace({r'(\w+)\+(\w+)' : r'\1' +r'\2' }, regex=True).astype(float)

Это работает нормально, и я получил объединение 2 соответствующихgroups

Есть ли решение для получения результата преобразования (один, два) в качестве замены в кадре данных?

1 Ответ

0 голосов
/ 05 октября 2019

Используйте Series.str.replace () , который поддерживает обратный вызов в качестве замены.

def conversion(m): 
    return str(int(m.group(1))*30 + float(int(m.group(2))*2.5))

df_test['Height'] = df_test['Height'].str.replace(r'(\d+)\+(\d+)', conversion).astype(float)

Функция обратного вызова принимает один аргумент, который является объектом соответствия регулярному выражению. вам нужно будет вернуть строку в качестве замены.

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