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

如何在pandas中提取姓名与带括号数字生成新列并删除原列,能否单行实现?

Pandas提取姓名与带方括号数字并生成新列的高效实现

核心思路:向量化字符串提取(比lambda高效)

优先用pandas内置的str.extract方法,它是向量化操作,不需要逐行遍历,性能远高于lambda+apply组合。我们用正则表达式一次性匹配出姓名和三个数字,同时自动去掉方括号。

分步实现(适合新手理解)

  1. 先准备模拟数据(贴合你的原始列格式):
import pandas as pd
df = pd.DataFrame({'原列': ['张三[10][20][30]', '李四[15][25][35]', '王五[5][15][25]', '赵六 [8][18][28]']})
  1. 提取并生成新列:
# 用正则提取姓名和三个数字,自动剥离方括号
extract_result = df['原列'].str.extract(r'([^\[]+)\[(\d+)\]\[(\d+)\]\[(\d+)\]')
# 给新列命名
extract_result.columns = ['姓名', '数字1', '数字2', '数字3']
# 清理姓名可能带的多余空格
extract_result['姓名'] = extract_result['姓名'].str.strip()
# 合并结果并删除原列
df = pd.concat([df.drop('原列', axis=1), extract_result], axis=1)

单行代码实现(高效简洁)

用pop方法直接取出原列并删除,结合join和rename一步完成所有操作:

df = df.join(df.pop('原列').str.extract(r'([^\[]+)\[(\d+)\]\[(\d+)\]\[(\d+)\]').assign(姓名=lambda x: x[0].str.strip()).rename(columns={0:'姓名', 1:'数字1', 2:'数字2', 3:'数字3'}))

正则表达式说明(新手必看)

  • ([^\[]+):匹配所有不是左方括号的字符,精准提取姓名部分
  • \[(\d+)\]:匹配[数字]格式的内容,(\d+)只提取里面的数字,重复三次对应三个数字列
  • 如果你的数字包含小数,可把\d+改成[\d.]+适配

最终效果示例

执行后DataFrame结构:

姓名数字1数字2数字3
张三102030
李四152535
王五51525
赵六81828

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:20:20