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

Pandas如何从字符串列提取V0-V20格式版本号并生成对应新列

实现代码

import pandas as pd
import numpy as np

# 构造原始DataFrame
d = {'col1': [1, 2,3,4,5,60,0,0,6,3,2,4],
     'col3': [1, 22,33,44,55,60,1,5,6,3,2,4],
     'Name': ['22a| df a1asd_V1|5P|hey-910929|abc-939090', 'xcd a2asd_V3','23vg aabsd_V1','22a| df a1asd_V1|5P|hey-910929|abc-939090','a3as  d_V1','aa bsd_V3','aasd_V4','aabsd_V4','aa_adn sd_V15',np.nan,'aasd_V12','aasd120Abs'],
     'Date': ['2021-06-13', '2021-06-13','2021-06-13','2021-06-14','2021-06-15','2021-06-15','2021-06-13','2021-06-16','2021-06-13','2021-06-13','2021-06-13','2021-06-16']}
dff = pd.DataFrame(data=d)

# 提取V+数字的版本标识,限制数字范围0-20
dff['Version'] = dff['Name'].str.extract(r'(V(?:20|1[0-9]|[0-9]))', expand=False)
# 生成“Version + 数字”格式的字段,无匹配留空
dff['Version_full'] = dff['Version'].apply(lambda x: f'Version {x[1:]}' if pd.notna(x) else '')
# 将未匹配到的NaN替换为空字符串
dff['Version'] = dff['Version'].fillna('')

运行后输出结果完全符合需求。

相关说明

  • 正则逻辑:(V(?:20|1[0-9]|[0-9]))中?:标记内部分组不单独捕获,保证str.extract只返回完整的V+数字字符串;数字匹配优先级为20→10-19→0-9,避免出现匹配截断问题。
  • pandas中对应SQL LIKE的功能可以用str.contains()实现,示例如下:
    # 等价于 WHERE Name LIKE '%V1%'
    dff[dff['Name'].str.contains('V1', na=False)]
    # 等价于 WHERE Name LIKE '22a%' 前缀匹配
    dff[dff['Name'].str.contains(r'^22a', na=False)]
    # 等价于 WHERE Name LIKE '%_V1' 后缀匹配
    dff[dff['Name'].str.contains(r'_V1$', na=False)]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:45:05