Reputation: 4442
I have dataframe and I need to filter that with regex.
Dataframe:
domain tag1
0 ^mail.ru/search Сервис
1 go.mail.ru$ Веб-портал
2 vk.com/audios Социальное
3 vk.com/video Социальное
4 vk.com/apps Социальное
5 vk.com Социальное
6 ^yandex.ru/search Сервис
7 ^yandex.ru/pogoda Сервис
8 ^yandex.ru$ Веб-портал
I need to get only domain
I try to use
def get_domain_encoding(df):
return df[df.domain.str.contains(r'[a-zA-Z0-9-_]+.[a-zA-Z0-9]')]
And it returns me
domain tag1
0 ^mail.ru/search Сервис
2 vk.com/audios Социальное
3 vk.com/video Социальное
4 vk.com/apps Социальное
5 vk.com Социальное
6 ^yandex.ru/search Сервис
7 ^yandex.ru/pogoda Сервис
8 ^yandex.ru$ Веб-портал
When I change it to
def get_domain_encoding(df):
return df[df.domain.str.contains(r'^[a-zA-Z0-9-_]+.[a-zA-Z0-9]$')]
It returns me empty dataframe.
How can I fix that?
Upvotes: 3
Views: 3966
Reputation: 153460
You can try this:
df.domain.str.extract('(\w+\.)?(\w+\.\w+)', expand=False)[1]
Output:
0 mail.ru
1 mail.ru
2 vk.com
3 vk.com
4 vk.com
5 vk.com
6 yandex.ru
7 yandex.ru
8 yandex.ru
Name: 1, dtype: object
Modify with a little cleanup, using named groups and discarding the 'subdomain' group:
df.domain.str.extract('(?P<subdomain>\w+\.)?(?P<domain>\w+\.\w+)',expand=False)['domain']
Upvotes: 5