У меня есть фрейм данных 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. Я не слишком знаком с регулярными выражениями, но это может быть тот случай, когда это применимо.
SOURCEURL
DOMAINNAME
Спасибо за обзор!
Использование urlparse:
urlparse
from urllib.parse import urlparse cell = # get cell from pandas df domain = urlparse(cell).netloc
Это выражение
https?:\/\/(?:www\.)?([^\/]+)
с этой простой левой границей
https?:\/\/(?:www\.)?
и эта группа захвата
([^\/]+)
может вернуть желаемые доменные имена.
Мы можем использовать положительный взгляд за ?<= и положительный взгляд ?= с регулярным выражением, чтобы получить все между http:// ИЛИ https:// и первым /:
?<=
?=
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