You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则批量转换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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:45:04