在函数中使用匹配组作为参数

我有一个数据框,我们有美国符号的人的大小,我想用正则表达式(或其他......)替换这些以厘米为单位的值


#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 个匹配组的串联


有没有一种解决方案可以将结果转换(一,二)作为数据框中的替换?


桃花长相依
浏览 120回答 1
1回答

慕慕森

使用支持回调的Series.str.replace()作为替换。def conversion(m):&nbsp;&nbsp; &nbsp; 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)回调函数采用一个参数,即正则表达式匹配对象。您将需要返回一个字符串作为替换。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python