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

如何从DataFrame列中提取方括号间的字符串并生成新列?

提取DataFrame列中方括号内的内容生成新列

直接用pandas的str.extract方法就能搞定,不需要太复杂的正则知识,我把步骤和代码理清楚:

核心代码

假设你的DataFrame名为df,要处理的列叫target_col,新列命名为bracket_content,代码如下:

import pandas as pd

# 生成新列,提取方括号内的内容
df['bracket_content'] = df['target_col'].str.extract(r'\[(.*?)\]')

正则表达式拆解(帮你理解)

别怕这个正则,拆开来很简单:

  • \[:匹配左方括号(因为[在正则里是特殊符号,必须加\转义才能匹配真实的方括号)
  • (.*?):这是捕获组,用来提取我们要的内容。.*?表示匹配任意字符,但采用「非贪婪模式」——意思是遇到第一个右方括号就停止,避免一行有多个方括号时提取过多内容
  • \]:匹配右方括号,同样加了转义符

示例演示

给你一个完整的示例,一看就懂:

# 构造测试用的DataFrame
df = pd.DataFrame({
    'target_col': [
        'Hello [World]',
        'I love [Python]',
        'Data analysis with [Pandas]',
        '这条内容没有方括号'
    ]
})

# 提取内容生成新列
df['bracket_content'] = df['target_col'].str.extract(r'\[(.*?)\]')

print(df)

运行后输出:

target_col bracket_content
0              Hello [World]           World
1              I love [Python]          Python
2  Data analysis with [Pandas]         Pandas
3            这条内容没有方括号             NaN

额外补充

  • 如果想给没有方括号的行填充默认值(比如「无匹配内容」),可以加fillna:
    df['bracket_content'] = df['target_col'].str.extract(r'\[(.*?)\]').fillna('无匹配内容')
    
  • 如果一行有多个方括号(比如"Hi [A] and [B]"),想提取所有内容,改用str.findall,得到的是列表格式:
    df['all_bracket_content'] = df['target_col'].str.findall(r'\[(.*?)\]')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:45:32