【问题标题】:Extraction of versions in paths pandas column提取路径 pandas 列中的版本
【发布时间】:2022-11-23 03:03:29
【问题描述】:

我有一个看起来像这样的数据框列:

                                             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:

我想要的输出是:

                                          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 

我试过这个:

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) + ')')

但是没有结果。我也看过其他代码,但没有一个能给我想要的输出。我正在努力解决这个问题,我们将不胜感激。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

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

    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'/(vd(.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)
    

    输出:

                                                   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
    

    【讨论】:

      猜你喜欢
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 2012-09-23
      相关资源
      最近更新 更多