изменять верхний регистр только в том случае, если за ним следует указанная c строка в python - PullRequest
0 голосов
/ 27 марта 2020

У меня есть некоторый текст в фреймах данных, в котором я хочу указать некоторые c фрукты в верхнем регистре. Текст такой, как показано ниже: ввод

one apple
two oranges
three bananas
an apple

и требуемый вывод

one Apple
two Oranges
three Bananas
an Apple

l oop Я могу дать условие, если в массиве / строке / списке есть любое слово «один» "," two "," three "и" an " (условно, когда эти ... любые слова в строке), после этого слова замените следующую следующую букву первой буквы в нижнем регистре на верхний регистр.

Если есть подсказка или помощь.

5 строк данных +++++++++++++++++++++++++++++ ++++++++++++++++++++++

ID Reference_time Comment
0 0059 one apple box
1 0156 five oranges left
2 1859 an engineer handling issue
3 1555 two persons have eaten, three still hungry
4 2109 an apple carton is still in stock

+++++++++++++++++++ ++++++++++++++++++++++++++++++++

Ответы [ 2 ]

3 голосов
/ 27 марта 2020

Вероятно, лучшие способы сделать это с помощью регулярных выражений, но это должно работать с использованием .str.extract

, единственным недостатком будет то, что если у вас есть несколько совпадений в одной строке, вам нужно обрабатывать / редактировать регулярное выражение.

repl = ['one','two','three','five','an']
pat = '|'.join(repl)


s = df["comment"].str.extract(rf"({pat})(.*\w.*$)")

s[1] = s[1].str.strip().str.capitalize()
df['comment_new'] = s.stack().groupby(level=0).agg(' '.join)

print(df[['comment_new','comment']])

                                  comment_new  \
0                               one Apple box   
1                           five Oranges left   
2                  an Engineer handling issue   
3  two Persons have eaten, three still hungry   
4           an Apple carton is still in stock   

                                      comment  
0                               one apple box  
1                           five oranges left  
2                  an engineer handling issue  
3  two persons have eaten, three still hungry  
4           an apple carton is still in stock 
1 голос
/ 27 марта 2020
keywords = ['one', 'two', 'three', 'an']

df['Comment'] = df['Comment'].apply(lambda x: toUpper(keywords, x))

def toUpper(keywords, sentence):
  word_list = sentence.split()
  for i in range(len(word_list)-1):
    if word_list[i] in keywords:
        word_list[i+1] = word_list[i+1].capitalize()

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