Как я могу извлечь доменное имя и вставить его в новый столбец Pandas? - PullRequest
1 голос
/ 01 июля 2019

У меня есть фрейм данных Pandas со многими столбцами, подмножество которых ниже:

df.info()

SQLDATE                  datetime64[ns]
SOURCEURL                object

df['SQLDATE', 'SOURCEURL'].sample()

SQLDATE    SOURCEURL
2017-01-08 http://www.huffingtonpost.co.uk/a/abc
2018-09-25 http://www.taiwannews.com.tw/a/news/123
2016-03-19 https://www.theguardian.com/a/2016/a/1/ab-bc
2015-12-12 https://nz.news.yahoo.com/world/a/3/a/
2017-04-07 https://www.thelocal.fr/2122/jkl
2019-02-21 http://today.az/news/a/123.html
2018-05-13 The BBC World News Report

Я ищу создание столбца, который может извлечь имя домена, чтобы получить новый столбец, который выглядит следующим образом:

df.sample()

SQLDATE    SOURCEURL                               DOMAINNAME
2017-01-08 http://www.huffingtonpost.co.uk/a/abc   www.huffingtonpost.co.uk
2018-09-25 http://www.taiwannews.com.tw/a/news/123 www.taiwannews.com.tw
2016-03-19 https://www.theguardian.com/a...        www.theguardian.com
2015-12-12 https://nz.news.yahoo.com/world/a/3/a/  nz.news.yahoo.com
2017-04-07 https://www.thelocal.fr/2122/jkl        www.thelocal.fr
2019-02-21 http://today.az/news/a/123.html         today.az
2018-05-13 The BBC World News Report               The BBC World News Report

Фрейм данных выглядит грязным, поскольку некоторые из полей SOURCEURL просто содержат текст, а не URL. Я хотел бы просто скопировать эти значения в столбец DOMAINNAME. Я не слишком знаком с регулярными выражениями, но это может быть тот случай, когда это применимо.

Спасибо за обзор!

Ответы [ 3 ]

3 голосов
/ 01 июля 2019

Использование urlparse:

from urllib.parse import urlparse

cell = # get cell from pandas df
domain = urlparse(cell).netloc
2 голосов
/ 01 июля 2019

Это выражение

https?:\/\/(?:www\.)?([^\/]+)

с этой простой левой границей

https?:\/\/(?:www\.)?

и эта группа захвата

([^\/]+)

может вернуть желаемые доменные имена.

Демо

1 голос
/ 02 июля 2019

Мы можем использовать положительный взгляд за ?<= и положительный взгляд ?= с регулярным выражением, чтобы получить все между http:// ИЛИ https:// и первым /:

m = df['SOURCEURL'].str.extract('(?<=http://)(.*?)(?=/)|(?<=https://)(.*?)(?=/)')
m = m[0].fillna(m[1]).fillna(df['SOURCEURL'])

df['DOMAINNAME'] = m
      SQLDATE                                     SOURCEURL                 DOMAINNAME
0  2017-01-08         http://www.huffingtonpost.co.uk/a/abc   www.huffingtonpost.co.uk
1  2018-09-25       http://www.taiwannews.com.tw/a/news/123      www.taiwannews.com.tw
2  2016-03-19  https://www.theguardian.com/a/2016/a/1/ab-bc        www.theguardian.com
3  2015-12-12        https://nz.news.yahoo.com/world/a/3/a/          nz.news.yahoo.com
4  2017-04-07              https://www.thelocal.fr/2122/jkl            www.thelocal.fr
5  2019-02-21               http://today.az/news/a/123.html                   today.az
6  2018-05-13                     The BBC World News Report  The BBC World News Report
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...