Как я могу оптимизировать поиск в pandas dataframe - PullRequest
0 голосов
/ 18 сентября 2018

Мне нужно найти слово «mas» в Dataframe, столбец с frase - это Corpo, а текст в этом столбце разделен в списке, например: мне нравятся птицы ---> split [я люблю птиц].Итак, мне нужно найти «mas» в португальской фразе и поймать только слова после «mas».Для выполнения этой функции требуется много времени.

df.Corpo.update(df.Corpo.str.split()) #tokeniza frase
df.Corpo = df.Corpo.fillna('') 

for i in df.index:
  for j in range(len(df.Corpo[i])):
    lista_aux = []

    if df.Corpo[i][j] == 'mas' or df.Corpo[i][j] == 'porem' or df.Corpo[i][j] == 'contudo' or df.Corpo[i][j] == 'todavia':
        lista_aux = df.Corpo[i]
        df.Corpo[i] = lista_aux[j+1:]
        break

    if df.Corpo[i][j] == 'question':
        df.Corpo[i] = ['question']
        break

1 Ответ

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

При работе с pandas фреймами данных (или numpy массивами) вы всегда должны пытаться использовать векторизованные операции вместо циклов for над отдельными элементами фрейма данных. Векторизованные операции (почти всегда) значительно быстрее, чем for-циклы.

В вашем случае вы можете использовать встроенную в панду операцию векторизации str.extract, которая позволяетизвлечение части строки, соответствующей шаблону поиска регулярных выражений.Шаблон поиска регулярного выражения mas (.+) должен захватывать часть строки, которая следует после 'mas'.

import pandas as pd

# Example dataframe with phrases
df = pd.DataFrame({'Corpo': ['I like birds', 'I mas like birds', 'I like mas birds']})

# Use regex search to extract phrase sections following 'mas'
df2 = df.Corpo.str.extract(r'mas (.+)')

# Fill gaps with full original phrase
df2 = df2.fillna(df.Corpo)

даст в результате:

In [1]: df2
Out[1]:
              0
0  I like birds
1    like birds
2         birds
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...