【问题标题】:Extracting the file extensions from file names in pandas从 pandas 中的文件名中提取文件扩展名
【发布时间】:2018-10-27 05:23:40
【问题描述】:

我在 pandas 数据框中有一列 FileName,它由包含格式文件名的字符串组成。文件名中可以​​包含点('.')。例如,a.b.c.d.txt 是一个 txt 文件。我只想拥有另一列FileType 仅包含文件扩展名的列。

示例数据帧:

FileName

a.b.c.d.txt

j.k.l.exe

处理后:

FileName    FileType

a.b.c.d.txt txt

j.k.l.exe   exe

我尝试了以下方法:

X['FileType'] = X.FileName.str.split(pat='.')

这有助于我拆分. 上的字符串。但是如何获取最后一个元素,即文件扩展名?

有点像

X['FileType'] = X.FileName.str.split(pat='.')[-1]

X['FileType'] = X.FileName.str.split(pat='.').pop(-1)

没有给出想要的输出。

【问题讨论】:

    标签: python string pandas


    【解决方案1】:

    选项 1
    apply

    df['FileType'] = df.FileName.apply(lambda x: x.split('.')[-1])
    

    选项 2
    使用 str 两次

    df['FileType'] = df.FileName.str.split('.').str[-1]
    

    选项 2b
    使用 rsplit(感谢@cᴏʟᴅsᴘᴇᴇᴅ)

    df['FileType'] = df.FileName.str.rsplit('.', 1).str[-1]
    

    所有结果:

          FileName FileType
    0  a.b.c.d.txt      txt
    1    j.k.l.exe      exe
    

    Python 3.6.4, Pandas 0.22.0

    【讨论】:

    • 作为对您的解决方案的一个小改进,我会推荐一个简单的rsplitdf.FileName.str.rsplit('.', 1).str[-1]... 这只会从右侧拆分一次,因此应该更有效。
    【解决方案2】:

    如果您想要从文件名中拆分扩展名,那么我会推荐一个列表理解——

    理解str.rsplit

    df['FileType'] = [f.rsplit('.', 1)[-1] for f in df.FileName.tolist()]
    df
    
          FileName FileType
    0  a.b.c.d.txt      txt
    1    j.k.l.exe      exe
    

    如果你想分割路径和文件名,有几个选项。

    os.path.splitext

    import os
    
    pd.DataFrame(
        [os.path.splitext(f) for f in df.FileName], 
        columns=['Name', 'Type']
    )
     
          Name  Type
    0  a.b.c.d  .txt
    1    j.k.l  .exe
    

    str.extract

    df.FileName.str.extract(r'(?P<FileName>.*)(?P<FileType>\..*)', expand=True)
    
          Name  Type
    0  a.b.c.d  .txt
    1    j.k.l  .exe
    

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 2011-03-31
      • 2010-10-07
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      相关资源
      最近更新 更多