Как классифицировать данные в пандах, используя содержащиеся ключевые слова - PullRequest
2 голосов
/ 09 июля 2019

Пусть df будет следующим фреймом данных:

      date   text
0  2019-6-7  London is good.             
1  2019-5-8  I am going to Paris.        
2  2019-4-4  Do you want to go to London?
3  2019-3-7  I love Paris!   

Я хотел бы добавить столбец city, который указывает город, содержащийся в text, то есть

       date  text                          city
0  2019-6-7  London is good.               London
1  2019-5-8  I am going to Paris.          Paris 
2  2019-4-4  Do you want to go to London?  London
3  2019-3-7  I love Paris!                 Paris 

Как это сделать без использования lambda?

Ответы [ 2 ]

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

При добавлении к методу @ WenYoBen, если в одном тексте есть только Париж или Лондон, тогда лучше str.extract:

regex = '(London|Paris)'
df['city'] = df.text.str.extract(regex)
df

       date         text                        city
0   2019-6-7    London is good.                 London
1   2019-5-8    I am going to Paris.            Paris
2   2019-4-4    Do you want to go to London?    London
3   2019-3-7    I love Paris!                   Paris

И если вы хотите, чтобы все города в вашем регулярном выражении были в тексте, тогда str.extractall также является опцией:

df['city'] = df.text.str.extractall(regex).values
df
          date  text                           city
0    2019-6-7   London is good.                London
1    2019-5-8   I am going to Paris.           Paris
2    2019-4-4   Do you want to go to London?   London
3    2019-3-7   I love Paris!                  Paris

Обратите внимание, что при наличии нескольких совпадений extractall возвращает список

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

Сначала вы можете сопоставить, что у вас есть список городов, затем str.findall

df.text.str.findall('London|Paris').str[0]
Out[320]: 
0    London
1     Paris
2    London
3     Paris
Name: text, dtype: object
df['city'] = df.text.str.findall('London|Paris').str[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...