Как удалить оставшуюся часть строки после символа в столбце данных? - PullRequest
0 голосов
/ 29 января 2019

У меня есть фрейм данных, который содержит данные пользователя.Существует столбец, который содержит имена файлов, к которым обращались пользователи.Имена файлов выглядят так:

blah-blah-blah/dss_outline.pdf  
doot-doot/helper_doc.pdf
blah-blah-blah/help_file.pdf

Моя цель состоит в том, чтобы отрубить все после и включая /, чтобы я мог просто посмотреть на программы верхнего уровня, которые изучают люди (которые организованы из множества различных файлов)under).

Итак, у меня две проблемы:

1 - Как мне «схватить» все до «/»?Я смотрю на регулярные выражения, но мне трудно написать правильное выражение.

2 - Как заменить все имена файлов на объединенные имена файлов?Я обнаружил, что могу использовать df['Filename'] = df['Filename'].str.split('/')[0], чтобы получить правильную часть, но это не будет применяться ко всему объекту серии.Это логика того, что я хочу сделать, но я не могу понять, как это сделать.

Спасибо

Ответы [ 4 ]

0 голосов
/ 29 января 2019

У вас есть много удобных решений:

1) Просто с помощью split() метода:

>>> df
                             col1
0  blah-blah-blah/dss_outline.pdf
1        doot-doot/helper_doc.pdf
2    blah-blah-blah/help_file.pdf


>>> df['col1'].str.split('/', 1).str[0].str.strip()
0    blah-blah-blah
1         doot-doot
2    blah-blah-blah

Имя: col1, dtype: object

2) Выможно использовать apply() + split()

>>> df['col1'].apply(lambda s: s.split('/')[0])
0    blah-blah-blah
1         doot-doot
2    blah-blah-blah
Name: col1, dtype: object

3) Вы можете использовать rsplit() + str[0], чтобы убрать желаемое:

>>> df['col1'].str.rsplit('/').str[0]
0    blah-blah-blah
1         doot-doot
2    blah-blah-blah
Name: col1, dtype: object

4) Вы можете использоватьПанды родные регулярные выражения С extract():

>>> df['col1'] = df['col1'].str.extract('([^/]+)')
>>> df
             col1
0  blah-blah-blah
1       doot-doot
2  blah-blah-blah

OR
# df.col1.str.extract('([^/]+)')
0 голосов
/ 29 января 2019

Вы можете использовать \/.*$ для соответствия части, которая вам не нужна, и удалить ее: DEMO
Соответствует косой черте и любому следующему символу до конца строки (будьте осторожныиспользовать многострочный флаг, если это требуется вашему движку!).

ИЛИ вы можете использовать ^[^/]+, чтобы найти нужную часть и извлечь ее: DEMO
Это соответствует любому последовательномусимволы, кроме / в начале строки (опять же, необходима многострочная!).

0 голосов
/ 29 января 2019

Использование series.apply():

>>> import pandas
>>> data = {'filename': ["blah-blah-blah/dss_outline.pdf", "doot-doot/helper_doc.pdf", "blah-blah-blah/help_file.pdf"]}
>>> df = pandas.DataFrame(data=data)
>>> df
                         filename
0  blah-blah-blah/dss_outline.pdf
1        doot-doot/helper_doc.pdf
2    blah-blah-blah/help_file.pdf
>>> def get_top_level_from(string):
...     return string.split('/')[0]
... 
>>> series = df["filename"]
>>> series
0    blah-blah-blah/dss_outline.pdf
1          doot-doot/helper_doc.pdf
2      blah-blah-blah/help_file.pdf
Name: filename, dtype: object
>>> series.apply(get_top_level_from)
0    blah-blah-blah
1         doot-doot
2    blah-blah-blah
Name: filename, dtype: object

Код:

def get_top_level_from(string):
    return string.split('/')[0]

results = df["filename"].apply(get_top_level_from)
0 голосов
/ 29 января 2019

Использование df.replace

df.replace('\/.*$','',regex=True)


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