我有一個數據框,我們有美國符號的人的大小,我想用正則表達式(或其他......)替換這些以厘米為單位的值#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)
回調函數采用一個參數,即正則表達式匹配對象。您將需要返回一個字符串作為替換。
添加回答
舉報
0/150
提交
取消