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

如何从Pandas的paths列中提取路径版本信息?

提取Pandas DataFrame路径中的版本号

问题背景

现有一个包含路径数据的Pandas DataFrame,paths列数据示例如下:

paths                    
0      ['/api/v2/clouds', '/api/v2/clouds/{cloud}']                      
1      ['/v0.1/book-lists/{type}/{date}', '/v0.1/book-lists']                
2      ['/v1/Video/Rooms', '/v1/Video/Rooms/{RoomSid}']                
3      ['/v3/attachments/{attachmentId}', '/v3/attachments']                
4      ['/v0.1/patrons', '/v0.2/patrons', '/v0.3/patrons/dependents']      

需要提取路径中的版本号,生成Path_Version列,预期输出:

paths                    Path_Version 
0      ['/api/v2/clouds', '/api/v2/clouds/{cloud}']                      v2   
1      ['/v0.1/book-lists/{type}/{date}', '/v0.1/book-lists']             v0.1   
2      ['/v1/Video/Rooms', '/v1/Video/Rooms/{RoomSid}']              v1  
3      ['/v3/attachments/{attachmentId}', '/v3/attachments']              v3  
4      ['/v0.1/patrons', '/v0.2/patrons', '/v0.3/patrons/dependents']      v0.1/v0.2/v0.3 

原尝试代码(未得到预期结果)

keywords = ['v1', 'v2', 'v3', 'v4', 'v1.0', 'v1.2', 'v1.1', 'v0.1', 'v0.2','v1.3', 'v1.4', 'v3.1', 'v3.2', '0.1.0', '3.1', 'v0.0.2', 'v0.0.3', 'v0.0.4', '1.0.0']
final_api['Path_Version'] = final_api['paths'].str.findall('(' + '|'.join(keywords) + ')')

问题原因

  1. paths列是列表类型,直接用str.findall会把整个列表转为字符串处理,匹配逻辑错误;
  2. 固定的keywords列表无法覆盖所有可能的版本号格式,扩展性差。

解决方案

使用正则表达式匹配版本号格式,结合apply遍历每个路径列表,提取去重后拼接:

import re
import pandas as pd

# 构造示例DataFrame(实际使用时替换为你的数据)
data = {
    'paths': [
        ['/api/v2/clouds', '/api/v2/clouds/{cloud}'],
        ['/v0.1/book-lists/{type}/{date}', '/v0.1/book-lists'],
        ['/v1/Video/Rooms', '/v1/Video/Rooms/{RoomSid}'],
        ['/v3/attachments/{attachmentId}', '/v3/attachments'],
        ['/v0.1/patrons', '/v0.2/patrons', '/v0.3/patrons/dependents']
    ]
}
final_api = pd.DataFrame(data)

# 正则表达式:匹配以v开头,后跟数字(支持多段小数点分隔,如v0.1、v1.2.3)
version_regex = re.compile(r'v\d+(?:\.\d+)*')

def get_unique_versions(path_list):
    # 收集所有匹配到的版本号,用集合去重
    versions = set()
    for path in path_list:
        matches = version_regex.findall(path)
        versions.update(matches)
    # 排序后用/连接,保证输出顺序一致
    return '/'.join(sorted(versions))

# 生成Path_Version列
final_api['Path_Version'] = final_api['paths'].apply(get_unique_versions)

print(final_api)

输出结果

paths     Path_Version
0        ['/api/v2/clouds', '/api/v2/clouds/{cloud}']              v2
1  ['/v0.1/book-lists/{type}/{date}', '/v0.1/book...            v0.1
2       ['/v1/Video/Rooms', '/v1/Video/Rooms/{Room...              v1
3  ['/v3/attachments/{attachmentId}', '/v3/attach...              v3
4  ['/v0.1/patrons', '/v0.2/patrons', '/v0.3/patr...  v0.1/v0.2/v0.3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:55:20