我在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)
未提供所需的输出。
答案 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