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

如何用Python正则表达式对Pandas列做条件判断并提取账号至新列

问题解决:拆分Pandas列中括号内的账号

现有数据集

Account
1Kevin (1234567)
2Buzz (7896345)
3Snakes (5438761)
4Marv
5Harry (9083213)

需求

检查Account列末尾是否存在括号包裹的数字账号,若存在则拆分出账号存入新列Account_Number,不存在的行该列留空(或可选删除该行)。

原代码问题分析

  1. 正则表达式错误:r'\(d+'未正确匹配数字,应改为r'\(\d+\)'(\d表示匹配数字,需匹配闭合的括号)
  2. 语法与逻辑错误:loc赋值语句格式错误,split使用空字符串作为分隔符完全不符合需求,且未正确定义new变量

正确实现方法

方法1:使用str.extract(推荐,简洁高效)

str.extract专门用于从字符串中提取正则匹配的内容,直接捕获括号内的数字:

import pandas as pd

# 构建数据集
data = {
    'Account': ['Kevin (1234567)', 'Buzz (7896345)', 'Snakes (5438761)', 'Marv', 'Harry (9083213)']
}
dataset = pd.DataFrame(data, index=[1,2,3,4,5])

# 提取括号内的账号数字,无匹配则留空(NaN)
dataset['Account_Number'] = dataset['Account'].str.extract(r'\((\d+)\)')

方法2:修正原代码的条件筛选+拆分逻辑

先筛选出包含账号的行,再拆分提取内容:

import pandas as pd

data = {
    'Account': ['Kevin (1234567)', 'Buzz (7896345)', 'Snakes (5438761)', 'Marv', 'Harry (9083213)']
}
dataset = pd.DataFrame(data, index=[1,2,3,4,5])

# 创建布尔掩码,标记存在账号的行
has_account = dataset['Account'].str.contains(r'\(\d+\)')
# 对匹配行拆分并提取账号
dataset.loc[has_account, 'Account_Number'] = dataset.loc[has_account, 'Account'].str.split(r'\(|\)', expand=True)[1]

处理结果

执行后数据集如下:

AccountAccount_Number
1Kevin (1234567)1234567
2Buzz (7896345)7896345
3Snakes (5438761)5438761
4MarvNaN
5Harry (9083213)9083213

若需要跳过(删除)无账号的行,可执行:

dataset = dataset.dropna(subset=['Account_Number'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:50:20