#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