gpt4 book ai didi

python - 使用匹配组作为函数中的参数

转载 作者:太空宇宙 更新时间:2023-11-03 20:19:31 24 4
gpt4 key购买 nike

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

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

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

最佳答案

使用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)

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

关于python - 使用匹配组作为函数中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58250890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com