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

如何替换DataFrame中Stuff列方括号内整数为Val列值?

问题描述

现有如下示例DataFrame:

# Create DataFrame from Dict
import pandas as pd

technologies = {
    'Val':[5, 9],
    'Stuff':["[demography_form][1]<div></table<text-align>[demography_form_date][1]", "<text-ali>[geography_form][1]<div></table<text-align>[geography_form_date][1]"]
              }
df = pd.DataFrame(technologies)

需要把Stuff列里所有方括号包裹的整数,替换成对应行Val列的数值,替换的整数数量和位置不固定,最终要得到这样的结果:

technologies = {
    'Val':[5, 9],
    'Stuff':["[demography_form][5]<div></table<text-align>[demography_form_date][5]", "<text-ali>[geography_form][9]<div></table<text-align>[geography_form_date][9]"]
              }
df = pd.DataFrame(technologies)
实现方法

方法一:用apply加正则表达式遍历替换

直接遍历每一行,用正则匹配所有[数字]格式的内容,替换成对应行的Val值:

import re

df['Stuff'] = df.apply(lambda row: re.sub(r'\[(\d+)\]', f'[{row["Val"]}]', row['Stuff']), axis=1)
  • 正则r'\[(\d+)\]'专门匹配方括号里的整数
  • 每行的替换值都是当前行的Val,不管有多少个需要替换的位置,一次性搞定

方法二:用str.replace的回调函数(Pandas 1.4.0及以上可用)

如果你的Pandas版本够新(1.4.0+),可以直接用str.replace的回调功能,不用手动遍历行,性能更好:

df['Stuff'] = df['Stuff'].str.replace(r'\[(\d+)\]', lambda m: f'[{df.loc[m.pos, "Val"]}]', regex=True)
  • m.pos能拿到当前匹配位置对应的行索引,直接取该行的Val值替换

验证结果

运行上面任意一种方法后,打印df就能看到期望的结果:

print(df)
# 输出:
#    Val                                              Stuff
# 0    5  [demography_form][5]<div></table<text-align>[d...
# 1    9  <text-ali>[geography_form][9]<div></table<text...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:22:20