Я работаю с набором данных url запроса (строк), который выглядит следующим образом в pandas df:
df request_url count 0 https://login.microsoftonline.com 24521 1 https://dt.adsafeprotected.com 11521 2 http://209.53.113.23/ 225211 3 https://googleads.g.doubleclick.net 6252 4 https://fls-na.amazon.com 65225 5 https://v10.vortex-win.data.microsoft.com 7852222 6 https://ib.adnxs.com 12 7 http://177.41.65.207/read.txt 188
Желаемый вывод:
newdf request_url count 0 https://login.microsoftonline.com 24521 1 https://dt.adsafeprotected.com 11521 2 https://googleads.g.doubleclick.net 6252 3 https://fls-na.amazon.com 65225 4 https://v10.vortex-win.data.microsoft.com 7852222 5 https://ib.adnxs.com 12
Затем я собираюсь использоватьTLD библиотека данных.Причина, по которой я хочу избавиться от них, заключается в том, что библиотека tld не знает, что делать с IP-адресом в домене.Есть ли простой способ удалить строки из кадра данных, которые содержат IP-адрес?
Создать функцию для проверки каждой строки и фильтрации по результату:
import re def hasip(row): return re.match(r"http://\d+\.\d+\.\d+\.\d+", row["request_url"]) is None newdf = df[df.apply(hasip, axis=1)]
Вы можете проверить с помощью findall с помощью регулярных выражений [0-9]+(?:\.[0-9]+){3}, astype bool преобразует весь пустой список в False
findall
[0-9]+(?:\.[0-9]+){3}
astype
False
df[~df.request_url.str.findall(r'[0-9]+(?:\.[0-9]+){3}').astype(bool)] Out[908]: request_url 0 https://login.microsoftonline.com 1 https://dt.adsafeprotected.com 3 https://googleads.g.doubleclick.net 4 https://fls-na.amazon.com 5 https://v10.vortex-win.data.microsoft.com 6 https://ib.adnxs.com