фрейм данных: условная замена - PullRequest
0 голосов
/ 11 июня 2018

У меня есть фрейм данных с вредоносными URL-адресами, где столбец url_type имеет статическое значение 2

    url_type    url_type_txt
    2           phishing/fraud
    2           trojan
    2           trojan
    2           phishing

Мне нужно заменить 2 на 1 в столбце url_type, где url_type_txt имеет слово % phish% (это может быть "фишинг", "URL-адрес фишинга" и т. Д.).Я пытался сделать это в цикле for и с loc вроде:

df3.loc[df3.url_type_txt=="phish", "url_type"] = 1

, но это не подходящее решение.

Может ли кто-нибудь мне помочь?Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

при работе со строками понимание обычного списка может быть быстрее по сравнению с векторизованными методами Pandas:

In [5]: df.loc[['phish' in u for u in df.url_type_txt], 'url_type'] = 1

In [6]: df
Out[6]:
   url_type    url_type_txt
0         1  phishing/fraud
1         2          trojan
2         2          trojan
3         1        phishing

Время для 40 000 строк DF:

In [7]: df = pd.concat([df] * 10**4, ignore_index=True)

In [8]: df.shape
Out[8]: (40000, 2)

In [9]: %timeit df.loc[df.url_type_txt.str.lower().str.contains('phish'), 'url_type']
103 ms ± 875 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [10]: %timeit df.loc[['phish' in u for u in df.url_type_txt], 'url_type']
10.7 ms ± 15.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [11]: %timeit df.loc[['phish' in u.lower() for u in df.url_type_txt], 'url_type']
19.3 ms ± 48.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [12]: %timeit df.loc[['phish' in u for u in df.url_type_txt.str.lower()], 'url_type']
41.1 ms ± 123 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
0 голосов
/ 11 июня 2018

Используйте str.lower (чтобы убедиться, что вы поймали Phish, а также phish) и str.contains():

df.loc[df.url_type_txt.str.lower().str.contains('phish'), 'url_type'] = 1

>>> df3
   url_type    url_type_txt
0         1  phishing/fraud
1         2          trojan
2         2          trojan
3         1        phishing
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...