Извлечение расширений файлов из имен файлов в пандах - PullRequest
0 голосов
/ 17 мая 2018

У меня есть столбец FileName в pandas dataframe, который состоит из строк, содержащих имена файлов в форме.Имя файла может содержать точки ('.') В них.Например, a.b.c.d.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)

не дало желаемого результата.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Если вы не хотите отделить расширение от имени файла, я бы порекомендовал понимание списка -

понимание с 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
0 голосов
/ 17 мая 2018

Опция 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...