如何从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
相关产品推荐
相关产品推荐

