Строка заменить несколькими элементами - PullRequest
0 голосов
/ 28 апреля 2018

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

Мой вопрос: Есть ли более эффективное решение, которое повторяет мой метод ниже?

Пример текстового фрейма данных:

d = {'ID': [1, 2, 3], 'Text': ['here is some random text', 'random text here', 'more random text']}
text_df = pd.DataFrame(data=d)

Пример условия dataframe:

d = {'Replace_item': ['<RANDOM_REPLACED>', '<HERE_REPLACED>', '<SOME_REPLACED>'], 'Text': ['random', 'here', 'some']}
replace_terms_df = pd.DataFrame(data=d)

Пример текущего решения:

def find_replace(text, terms):
for _, row in terms.iterrows():
    term = row['Text']
    item = row['Replace_item']
    text.Text = text.Text.str.replace(term, item)
    return text
find_replace(text_df, replace_terms_df)

Пожалуйста, дайте мне знать, если что-то выше требует уточнения. Спасибо,

1 Ответ

0 голосов
/ 28 апреля 2018

Использование zip + str.replace для трех столбцов и одновременное присвоение результатов столбцу сократило время на 50% (от ~ 400 до ~ 200us используя %timeit):

text_df['Text'] = [z.replace(x, y) for (x, y, z) in zip(replace_terms_df.Text, replace_terms_df.Replace_item, text_df.Text)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...