Pet*_*rov 2 python regex pandas
我有数据框,我需要使用正则表达式进行过滤。
数据框:
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$ ???-??????
Run Code Online (Sandbox Code Playgroud)
我只需要获取域名
我尝试使用
def get_domain_encoding(df):
return df[df.domain.str.contains(r'[a-zA-Z0-9-_]+.[a-zA-Z0-9]')]
Run Code Online (Sandbox Code Playgroud)
它又回到了我
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$ ???-??????
Run Code Online (Sandbox Code Playgroud)
当我将其更改为
def get_domain_encoding(df):
return df[df.domain.str.contains(r'^[a-zA-Z0-9-_]+.[a-zA-Z0-9]$')]
Run Code Online (Sandbox Code Playgroud)
它返回我空的数据框。
我该如何解决?
您可以尝试以下方法:
df.domain.str.extract('(\w+\.)?(\w+\.\w+)', expand=False)[1]
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
稍加清理即可修改,使用命名组并丢弃“子域”组:
df.domain.str.extract('(?P<subdomain>\w+\.)?(?P<domain>\w+\.\w+)',expand=False)['domain']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2158 次 |
| 最近记录: |