Как заменить столбец кадра данных Pandas только теми словами, которые существуют в словаре или текстовом файле? - PullRequest
0 голосов
/ 07 октября 2019

Привет, у меня есть файл данных pandas и текстовый файл, который выглядит примерно так:

df:
+----------------------------------+
|           Description            |
+----------------------------------+
| hello this is a great test $5435 |
| this is an432 entry              |
| ...                              |
| entry number 43535               |
+----------------------------------+

txt:
word1
word2
word3
...
wordn

Описания не важны.

Я хочу просмотреть каждую строку в df, разделенную на '', и для каждого слова, если слово есть в тексте, в противном случае удалите его.

Пример:

Предположим, что мой текстовый файл выглядит так

hello
this
is
a
test

, а описание выглядит так

"hello this is a great test $5435"

, тогда результат будет hello this is a test, поскольку great и $5435 нев тексте.

Я могу написать что-то вроде этого:

def clean_string(rows):
    for row in rows:
        string = row.split()
        cleansed_string = []
        for word in string:
            if word in text:
                cleansed_string.append(word)
        row = ' '.join(cleansed_string)

Но есть ли лучший способ добиться этого?

1 Ответ

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

Использование:

with open('file.txt', encoding="utf8") as f:
    L = f.read().split('\n')

print (L)
['hello', 'this', 'is', 'a', 'test']

f = lambda x: ' '.join(y for y in x.split() if y in set(L))
df['Description'] = df['Description'].apply(f)

Для повышения производительности:

s = set(L)
df['Description'] = [' '.join(y for y in x.split() if y in s) for x in df['Description']]

print (df)
            Description
0  hello this is a test
1               this is
2                      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...