Python Pandas中替换带括号数值:提取括号内数字的实现问题
问题
需要将Pandas数据框各列中形如number1(number2)的单元格值替换为括号内的number2(例如56(3)→3,33(5)→5)。尝试使用df.replace()时,用lambda函数无法实现依赖匹配内容的替换,代码如下:
df.replace(to_replace='[0-9]+([0-9]+)', value=lambda x: int(x.split("(")[1].strip(")")), regex=True)
解决方案1:使用str.extract(推荐)
直接提取括号内的数字,写法更直观:
df = df.apply(lambda col: col.str.extract(r'\((\d+)\)', expand=False).astype(int))
- 正则
\((\d+)\)精准匹配括号内的数字组,extract直接取出该组内容 - 若不需要整数类型,可去掉
.astype(int)保留字符串格式
解决方案2:修正df.replace的lambda写法
原代码的lambda参数错误,df.replace的lambda接收的是匹配对象(Match object),需通过group()方法获取捕获组内容:
df.replace(to_replace=r'\d+\((\d+)\)', value=lambda m: int(m.group(1)), regex=True)
- 正则修正为
r'\d+\((\d+)\)',确保完全匹配数字(数字)的格式 - 用
m.group(1)直接获取括号内的捕获组内容,转成整数返回
内容的提问来源于stack exchange,提问作者Mattyred99
相关产品推荐
相关产品推荐

