从pandas中的文件名中提取文件扩展名

时间:2018-05-17 03:45:31

标签: python string pandas

我在pandas dataframe中有一个列FileName,它包含包含表单文件名的字符串。文件名中可以​​包含点('。')。例如,a.b.c.d.txt是一个txt文件。我只想让另一列FileType列只包含文件扩展名。

示例DataFrame:

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)

未提供所需的输出。

2 个答案:

答案 0 :(得分:3)

选项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

答案 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