为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

桃花长相依 2022-06-14 16:50:50
我有一个数据框,我们有美国符号的人的大小,我想用正则表达式(或其他......)替换这些以厘米为单位的值#approximationdef conversion(one, two):    print(one)    return (int(one)*30 + float(int(two)*2.5))df_test = df_dummiesdf_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_dummiesValueError: invalid literal for int() with base 10: '\\1'但如果我这样做:#approximationdef conversion(one, two):    print(one)    return (int(one)*30 + float(int(two)*2.5))df_test = df_dummiesdf_test['Height'] = df_test['Height'].replace({r'(\w+)\+(\w+)' : r'\1' +r'\2' }, regex=True).astype(float)它工作正常,我得到了 2 个匹配组的串联有没有一种解决方案可以将结果转换(一,二)作为数据框中的替换?
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

使用支持回调的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)

回调函数采用一个参数,即正则表达式匹配对象。您将需要返回一个字符串作为替换。


查看完整回答
反对 回复 2022-06-14
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信