Pandas: заменить все слова в строке определенным значением, кроме слов из списка - PullRequest
0 голосов
/ 13 июля 2020

У меня есть следующий фрейм данных, но большего размера:

df = {"text": ["it is two degrees warmer", "it is five degrees warmer today", "it was ten degrees warmer and not cooler", "it is ten degrees cooler", "it is too frosty today", "it is a bit icy and frosty today" ]}

allowed_list= ["cooler", "warmer", "frosty", "icy"]

Я хотел бы заменить все слова, кроме слов в списке, на 'O', разделяя его запятыми следующим образом:

 desired output:

 text
 0  O,O,O,O,warmer
 1  O,O,O,O,warmer,O
 2  O,O,O,O,warmer,O,O,cooler
 3  O,O,O,O,cooler
 4  O,O,O,frosty,O
 5  O,O,O,O,icy,O,frosty,O,

то, что я сделал до сих пор, - это разделение строк для списка с помощью str.split(' ') на основе пробелов, но не знаю, как избавиться от слов, которых нет в списке.

1 Ответ

2 голосов
/ 13 июля 2020

Вы можете использовать понимание списка и join заднюю настройку , в качестве разделителя. Также, построив set из allowed_list, мы получим более быстрый поиск:

allowed_set= set(["cooler","warmer","frosty","icy"])
df['text'] = [','.join([w if w in allowed_set else 'O' for w in s.split()]) 
              for s in df['text']]
print(df)

                        text
0             O,O,O,O,warmer
1           O,O,O,O,warmer,O
2  O,O,O,O,warmer,O,O,cooler
3             O,O,O,O,cooler
4             O,O,O,frosty,O
5     O,O,O,O,icy,O,frosty,O
...