我有数据框,我需要使用正则表达式对其进行过滤。
数据帧:
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$ Веб-портал
我只需要获得域名
我尝试使用
def get_domain_encoding(df):
return df[df.domain.str.contains(r'[a-zA-Z0-9-_]+.[a-zA-Z0-9]')]
它会让我回头
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$ Веб-портал
当我将其更改为
时def get_domain_encoding(df):
return df[df.domain.str.contains(r'^[a-zA-Z0-9-_]+.[a-zA-Z0-9]$')]
它返回空数据帧。
我该如何解决?
答案 0 :(得分:4)
你可以试试这个:
df.domain.str.extract('(\w+\.)?(\w+\.\w+)', expand=False)[1]
输出:
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
使用一些清理进行修改,使用命名组并丢弃“子域”组:
df.domain.str.extract('(?P<subdomain>\w+\.)?(?P<domain>\w+\.\w+)',expand=False)['domain']