Как вы подсчитываете совпадения подстрок regex в кадре данных и применяете их как новую функцию? - PullRequest
0 голосов
/ 18 октября 2018

Я хотел бы добавить функцию к существующему фрейму данных, который подсчитывает вхождения подстроки.Например, если я хочу посчитать вхождения https в строке str, я могу сделать: str.count("https")

Но как мне применить это к каждой строке DataFrame?

Label    Text
0        Lorem ipsum dolor sit amet ?
1        Quis https://url.com/a nunc https://g.co/b elit ?
0        Donec https://url.com/c interdum libero,
0        Consectetur convallis inbox.gmail.com/d auctor.
1        Praesent ? semper magna lorem

Требуемый вывод:

Label    Text                                             count_https
0        Lorem ipsum dolor sit amet ?                       0
1        Quis https://url.com/a nunc https://g.co/b elit ?  2
0        Donec https://url.com/c interdum libero,            1
0        Consectetur convallis inbox.gmail.com/d auctor.     0
1        Praesent ? semper magna lorem                      0

Вот моя последняя попытка применить новую функцию, используя .find("https"):

df.apply(lambda x: len([w for w in str(x).split() if w.find("https") != -1()]))

Но это приводит к ошибке TypeError:

TypeError: 'int' object is not callable

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Вы можете использовать count, но вы все еще хотите использовать лямбду, тогда вы можете использовать re

import re
df.apply(lambda x: len(re.findall('https',str(x))))

В этом случае можно вызвать исправление вашей переменной int решения -1 () вместо проверкирасположение индекса, которое просто -1

df.apply(lambda x: len([w for w in str(x).split() if w.find("https") != -1]))
0 голосов
/ 18 октября 2018

Не уверен, если это опечатка или нет, но -1() не имеет смысла, так как невозможно назвать целое число.

В любом случае, есть лучший подход для достижения того, что вы пытаетесь сделать,Вы можете использовать векторизацию count.Векторизованная операция почти всегда будет быстрее, чем apply с лямбдой.

df['count_https'] = df['Text'].str.count('https')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...