Я пытаюсь заменить определенные слова, которые встречаются в самом первом выражении в каждой строке фрейма данных. Однако переход в позицию «1» заменяет все. Почему передача "1" в replace не работает? Есть ли другой способ? Спасибо!

Начальное:

df_test = pd.read_excel('sample.xlsx')
print('Initial: \n',df_test)

Initial: 
                                         some_text
0   ur goal is to finish shopping for books today
1  Our goal is to finish shopping for books today
2                          The help is on the way
3        he way is clear … he is going to library

Пытался:

df_test['some_text'] = df_test['some_text'] \
        .str.replace('ur ','Our ',1) \
        .str.replace('he ','The ',1) 
print('Tried:\n',df_test)

Tried: (Incorrect Results) 
                                          some_text
0   Our goal is to finish shopping for books today
1  OOur goal is to finish shopping for books today
2                          TThe help is on the way
3        The way is clear … he is going to library

Требуется окончательный результат:

                                    some_text
0   Our goal is to finish shopping for books today
1  Our goal is to finish shopping for books today
2                          The help is on the way
3        The way is clear … he is going to library
3
sharp 3 Дек 2018 в 19:23

2 ответа

Лучший ответ

Не уверен, почему другой ответ был удален, он был гораздо более кратким и сработал. (Извините, я не помню, кто это опубликовал. Я попробовал ответить, и он сработал, но имел определенные ограничения)

df.some_text.str.replace('^ur','Our ').str.replace('^he','The ')

Однако, как указано в комментариях, это заменит все начальные символы, начинающиеся с 'ur' ('ursula') или 'he' ('helen').

Исправленный код:

df.some_text.str.replace('^ur\s','Our ').str.replace('^he\s','The ')

'^' обозначает начало строки и должен заменять только неполные слова в начале строки. '\s' обозначает пробел после первого слова, чтобы оно соответствовало только правильному слову.

3
ParvBanks 3 Дек 2018 в 18:07