【问题标题】:Get folder path from file with pandas series使用熊猫系列从文件中获取文件夹路径
【发布时间】:2019-04-12 23:08:15
【问题描述】:

我正在使用 pandas 处理文件路径列表,我需要提取文件夹路径。

所以来自:

/volume1/SYN/FOLDER1/FILE.TXT
/volume1/SYN/FOLDER2/SUBFOLDER/FILE.PDF

我需要获取文件夹路径:

/volume1/SYN/FOLDER1/
/volume1/SYN/FOLDER2/SUBFOLDER/

我找到了获取文件名而不是文件夹路径的方法

data['index'] = data['File'].str.split('/').str[-1]

有什么想法吗?

【问题讨论】:

    标签: python pandas substring filenames series


    【解决方案1】:

    您可以使用 os.path.splitext 并通过列表解析或带有自定义函数的 apply 提取第一个拆分。

    from os.path import splitext
    
    df = pd.DataFrame({'filepaths': [r'/volume1/SYN/FOLDER1/FILE.TXT',
                                     r'/volume1/SYN/FOLDER2/SUBFOLDER/FILE.PDF']})
    
    # list comprehension, more efficient
    df['folder'] = [splitext(x)[0] for x in df['filepaths']]
    
    # apply + lambda implicit loop
    df['folder'] = df['filepaths'].apply(lambda x: splitext(x)[0])
    
    print(df)
    
                                     filepaths  \
    0            /volume1/SYN/FOLDER1/FILE.TXT   
    1  /volume1/SYN/FOLDER2/SUBFOLDER/FILE.PDF   
    
                                    folder  
    0            /volume1/SYN/FOLDER1/FILE  
    1  /volume1/SYN/FOLDER2/SUBFOLDER/FILE  
    

    【讨论】:

    • 我喜欢这个答案。
    【解决方案2】:

    使用rsplit:

    data['index'] = data['File'].str.rsplit('/', n=1).str[0] + '/'
    

    如果没有缺失值和性能很重要:

    data['index'] = [x.rsplit('/', 1)[0] + '/' for x in data['File']]
    
    
    print (data)
                                          File                            index
    0            /volume1/SYN/FOLDER1/FILE.TXT            /volume1/SYN/FOLDER1/
    1  /volume1/SYN/FOLDER2/SUBFOLDER/FILE.PDF  /volume1/SYN/FOLDER2/SUBFOLDER/
    

    【讨论】:

      【解决方案3】:

      pandas-path 库将 pathlib 包装为任何 pandas 系列或索引上的 .path 访问器。该功能使这个案例变得非常简单:

      import pandas as pd
      from pandas_path import path
      
      files = pd.Series([
          '/volume1/SYN/FOLDER1/FILE.TXT',
          '/volume1/SYN/FOLDER2/SUBFOLDER/FILE.PDF',
      ])
      
      # .path accessor created by importing pandas_path
      files.path.parent
      
      #> 0              /volume1/SYN/FOLDER1
      #> 1    /volume1/SYN/FOLDER2/SUBFOLDER
      #> dtype: object
      

      reprexlitev0.4.2 于太平洋标准时间 2021-03-06 22:21:15 创建

      【讨论】:

        猜你喜欢
        • 2010-10-14
        • 1970-01-01
        • 2013-06-16
        • 1970-01-01
        • 1970-01-01
        • 2017-11-03
        • 2013-08-05
        • 2011-07-27
        • 1970-01-01
        相关资源
        最近更新 更多