Как извлечь подстроку, указав до и после разделителя - PullRequest
3 голосов
/ 04 августа 2020

У меня есть фрейм данных, содержащий URL-адреса, и я хочу извлечь что-то среднее.

df
    URL
    https://storage.com/vision/Glass2020/2020-02-04_B8I8FZHl-xJ_2236301468348443721.jpg
    https://storage.com/vision/Carpet5020/2020-02-04_B8I8FZHl-xJ_2236301468348443721.jpg
    https://storage.com/vision/Metal8020/2020-02-04_B8I8FZHl-xJ_2236301468348443721.jpg

желаемый результат будет примерно таким

            URL                                                                           Type
 https://storage.com/vision/Glass2020/2020-02-04_B8I8FZHl-xJ_2236301468348443721.jpg      Glass2020
 https://storage.com/vision/Carpet5020/2020-02-04_B8I8FZHl-xJ_2236301468348443721.jpg     Carpet5020
 https://storage.com/vision/Metal8020/2020-02-04_B8I8FZHl-xJ_2236301468348443721.jpg      Metal8020

Я бы использовал df['URL'].str.extract но чтобы понять, как определять до и после разделителя.

Ответы [ 2 ]

4 голосов
/ 04 августа 2020

Попробуйте str.split:

df['Type'] = df.URL.str.split('/').str[-2]
4 голосов
/ 04 августа 2020

Одна идея - использовать Series.str.split с выбором второго последнего значения путем индексации:

df['Type'] = df['URL'].str.split('/').str[-2]
print (df)
                                                 URL        Type
0  https://storage.com/vision/Glass2020/2020-02-0...   Glass2020
1  https://storage.com/vision/Carpet5020/2020-02-...  Carpet5020
2  https://storage.com/vision/Metal8020/2020-02-0...   Metal8020

РЕДАКТИРОВАТЬ: для указания других значений за пределами ожидаемого вывода используйте Series.str.extract:

df['Type'] = df['URL'].str.extract('vision/(.+)/2020')
print (df)
                                                 URL        Type
0  https://storage.com/vision/Glass2020/2020-02-0...   Glass2020
1  https://storage.com/vision/Carpet5020/2020-02-...  Carpet5020
2  https://storage.com/vision/Metal8020/2020-02-0...   Metal8020
...