如何用正则批量转换Pandas DataFrame中带括号的字符串为负数
方法1:apply + lambda 实现(符合你想要的组合写法)
注意你原有逻辑需要补充匹配判断,避免正数值匹配失败时报错:
import re import pandas as pd # 你的正则规则 neg_pat = r'\((\d+)\)' # 嵌套apply遍历全表每个单元格 df = df.apply( lambda col: col.apply( lambda x: '-' + re.search(neg_pat, x).group(1) if re.fullmatch(neg_pat, x) else x ) ).astype(int)
如果觉得嵌套lambda可读性差,可以单独封装转换函数:
def convert_str_num(x): match_res = re.fullmatch(neg_pat, x) if match_res: return f'-{match_res.group(1)}' return x df = df.apply(lambda col: col.apply(convert_str_num)).astype(int)
方法2:向量化字符串替换(更推荐,性能远高于apply循环)
直接用pandas内置的正则替换能力,全表转换一行代码即可完成:
df = df.replace(r'\((\d+)\)', r'-\1', regex=True).astype(int)
转换后最终结果:
a b c 0 19 -202 101 1 -30 200 -30 2 -1000 100 40
如果你后续不需要做数值计算,保留字符串格式的话,去掉末尾的
.astype(int)即可。
内容的提问来源于stack exchange,提问作者Chuck
相关产品推荐
相关产品推荐

