Как заменить строку в тексте, если строка находится в списке в Python? - PullRequest
1 голос
/ 05 октября 2019

Фрейм данных имеет 2 столбца: предложение и список. Требуется заменить строку в df ['предложение'], которая присутствует в df ['список'], на строку найдена | присутствует.

from pandas import DataFrame

df = {'list': [['Ford','Mercedes Benz'],['ford','hyundai','toyota'],['tesla'],[]],
        'sentence': ['Ford is less expensive than Mercedes Benz' ,'toyota and hyundai mileage is good compared to ford','tesla is an electric car','toyota too has electric cars']
        }

df = DataFrame(df,columns= ['list','sentence'])

Ожидаемый вывод для df ['предложение']:

Ford|present is less expensive than Mercedes Benz|present
toyota|present and hyundai|present mileage is good compared to ford|present
tesla|present is an electric car
toyota too has electric cars

Ответы [ 3 ]

1 голос
/ 05 октября 2019

С заменой регулярного выражения:

(вырезано из IPython интерактивный сеанс)

In [36]: import re                                                                                          

In [37]: def sub_from_list(row): 
    ...:     if row['list']: 
    ...:         row['sentence'] =  re.sub(r'({})'.format('|'.join(set(row['list']))), r'\1|present', row['s
    ...: entence']) 
    ...:     return row 
    ...:                                                                                                    

In [38]: df.apply(sub_from_list, axis=1)                                                                    
Out[38]: 
                      list                                           sentence
0          [Ford, hyundai]     Ford|present is expensive than hyundai|present
1  [ford, hyundai, toyota]  toyota|present and hyundai|present mileage is ...
2                  [tesla]                   tesla|present is an electric car
3                       []                       toyota too has electric cars
0 голосов
/ 05 октября 2019

Вы можете использовать пользовательскую функцию для фрейма данных следующим образом:

Код

import pandas as pd

df = {'list': [['Ford','hyundai'],['ford','hyundai','toyota'],['tesla'],[]],
        'sentence': ['Ford is expensive than hyundai' ,'toyota and hyundai mileage is good compared to ford','tesla is an electric car','toyota too has electric cars']
        }

df = pd.DataFrame(df)

def rep_text(row):
    if not row.list:
        return row
    words = row.sentence.split()
    new_words = [word+'|present' \
    if word in row.list else word\
    for word in words]

    row['sentence'] = ' '.join(new_words)
    return row

df = df.apply(rep_text, axis=1)

Вывод

                      list                                           sentence
0          [Ford, hyundai]     Ford|present is expensive than hyundai|present
1  [ford, hyundai, toyota]  toyota|present and hyundai|present mileage is ...
2                  [tesla]                   tesla|present is an electric car
3                       []                       toyota too has electric cars
0 голосов
/ 05 октября 2019

Вы можете сделать это, используя функцию apply и регулярное выражение для замены текста внутри функции apply

import re

df = {'list': [['Ford','Mercedes Benz'],['ford','hyundai','toyota'],['tesla'],[]],
        'sentence': ['Fords is less expensive than Mercedes Benz' ,'toyota and hyundai mileage is good compared to ford','tesla is an electric car','toyota too has electric cars']
        }

df = DataFrame(df,columns= ['list','sentence'])

def replace_values(row):
    if len(row.list)>0:
        pat = r"(\b"+"|".join(row.list) +r")(\b)"
        print(pat)
        row.sentence = re.sub(pat, "\\1|present\\2", row.sentence)
    return row

df.apply(replace_values, axis=1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...