[英]Pandas: str.contains using regex
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? 我该如何解决?
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']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.