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

如何在pandas df.replace()中修改捕获组实现数字千分位格式化

问题

需要在pandas方法链式调用中,为DataFrame单元格字符串内的数字添加千分位分隔符。当前尝试用df.replace()方法,但无法正确处理正则捕获组的后续格式化,比如尝试str(float(r"\1"))完全无效。

现有代码:

import pandas as pd

df = pd.DataFrame({'a_column': ['1000 text', 'text', '25000 more text', '1234567', 'more text'],
        "b_column": [1, 2, 3, 4, 5]})

df = (df.reset_index()
      .replace({"a_column": {"(\d+)": r"\1"}}, regex=True))

期望输出:

index         a_column  b_column
0      0        1,000 text       1
1      1            text         2
2      2  25,000 more text       3
3      3        1,234,567        4
4      4        more text        5
解决方案

df.replace()的正则替换仅支持固定字符串或简单反向引用,无法直接对捕获的数字做格式化处理。要实现需求,需在链式调用中使用str.replace()配合自定义格式化逻辑,或者通过apply处理目标列。

方法1:链式调用中用assign + str.replace配合lambda

利用Python字符串格式化功能,将捕获到的数字字符串转换为整数后添加千分位分隔符:

import pandas as pd

df = pd.DataFrame({'a_column': ['1000 text', 'text', '25000 more text', '1234567', 'more text'],
        "b_column": [1, 2, 3, 4, 5]})

df = (df.reset_index()
      .assign(a_column=lambda x: x['a_column'].str.replace(
          r'(\d+)',
          lambda match: f"{int(match.group(1)):,}",
          regex=True
      )))

print(df)

方法说明

  • 使用assign方法在链式调用中修改a_column,保持调用链的连贯性
  • str.replace的第二个参数传入lambda函数,接收匹配对象match,通过match.group(1)获取捕获的数字字符串
  • 用f"{int(match.group(1)):,}"语法将数字转换为整数后自动添加千分位分隔符

输出结果

index         a_column  b_column
0      0        1,000 text         1
1      1              text         2
2      2  25,000 more text         3
3      3        1,234,567         4
4      4        more text         5

内容的提问来源于stack exchange,提问作者mouwsy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:42:53