проанализируйте URL-адрес в столбце pandas df и получите значение определенного индекса

#python #pandas #dataframe #urlparse #url-parsing

#python #pandas #фрейм данных #urlparse #url-синтаксический анализ

Вопрос:

У меня есть pandas df со столбцом url . Данные выглядят следующим образом:

 row               url
1      'https://www.delish.com/cooking/recipe-ideas/recipes/four-cheese'
2      'https://www.delish.com/holiday-recipes/thanksgiving/thanksgiving-cabbage/
3      'https://www.delish.com/kitchen-tools/cookware-reviews/advice/kitchen-tools-gadgets/'
  

Мне нужно только получить значения 2-го индекса, который относится к кулинарным или праздничным рецептам и т.д.
Желаемый результат:

 row               url
1               cooking
2               holiday-recipes
3               kitchen-tools
  

Я хотел разобрать URL-адреса по разным столбцам, а затем удалить столбцы, которые мне не нужны. Вот код:

 df['protocol'],df['domain'],df['path']=zip(*df['url'].map(urlparse(df['url']).urlsplit))
  

Сообщение об ошибке: ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Есть ли лучший способ решить проблему? Как я могу получить конкретный индекс?

Ответ №1:

Это то, что вы ищете?

 df['url'] = df['url'].str.split('/').str[3]
print(df)

   row              url
0    1          cooking
1    2  holiday-recipes
2    3    kitchen-tools
  

Комментарии:

1. Точно! Большое вам спасибо. Я принял ответ.

Ответ №2:

Другой способ — сопоставить alphas с символом - сразу после com

 df['url']=df['url'].str.extract('((?<=com/)[a-z-] )')



          url
0          cooking
1  holiday-recipes
2    kitchen-tools