首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >paths熊猫栏版本的提取

paths熊猫栏版本的提取
EN

Stack Overflow用户
提问于 2022-11-22 18:51:21
回答 2查看 47关注 0票数 0

我有一个dataframe列,如下所示:

代码语言:javascript
复制
                                             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]      

我想以这样的格式从列中提取versions

我想要的输出是:

代码语言:javascript
复制
                                          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}'....]              v2  
3      ['/v3/attachments/{attachmentId}', '/v3/attachments]              v3  
4      ['/v0.1/patrons', '/v0.2/patrons', '/v0.3/patrons/dependents]      v0.1/v0.2/v0.3 

我试过这样做:

代码语言:javascript
复制
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) + ')')

但没有产生任何结果。我也看过其他代码,但它们都没有给我想要的输出。我正努力想办法解决这个问题,任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-22 19:08:29

不需要关键字,只需在开始时使用:

代码语言:javascript
复制
df["Path_Version"]= (
                        df["paths"].str.findall(r"(v\d\.?\d?)")
                                   .apply(lambda x: "/".join(set(x)))
                    )

#产出:

代码语言:javascript
复制
print(df.to_string())
                                                          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.2/v0.3/v0.1
票数 5
EN

Stack Overflow用户

发布于 2022-11-22 19:03:29

这似乎是一个很好的正则表达式候选人:

代码语言:javascript
复制
import pandas as pd
import re

data = [
      [['/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']]
]

df = pd.DataFrame(data, columns=['paths'])

ver = re.compile(r'/(v\d(\.\d)?)/')
def getver(row):
    vsets = set()
    for p in row:
        chk = ver.search(p)
        vsets.add( chk.group(1) )
    return '/'.join(vsets)

df['Version'] = df.paths.apply(getver)
print(df)

输出:

代码语言:javascript
复制
                                               paths         Version
0           [/api/v2/clouds, /api/v2/clouds/{cloud}]              v2
1  [/v0.1/book-lists/{type}/{date}, /v0.1/book-li...            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/d...  v0.2/v0.3/v0.1
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74537690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档