Сегмент кода в Python продолжает изменять содержимое Dataframe, несмотря на то, что на него нет ссылок - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть следующий Dataframe в Python, где «data» = полный набор данных, состоящий из 2 столбцов строк, «Description» и «Category».

«dataTrain» является подмножеством «data»

"catBag" - это список всех слов, использованных в 'Description' из строк определенной 'Category'

"catDict" - это список всех слов, используемых в 'Description 'из строк всех других категорий.

"catUnique" возвращает мне все слова, которые являются уникальными для конкретной категории.

Вложенный цикл заменяет текст' Description 'только словамикоторые уникальны для категории строки.

classNames = sorted(list(set(dataTrain['Category'])))
catUnique = [[] for _ in range(len(classNames))]
dataTemp = dataTrain
for i in range(len(classNames)):
    catBag = set() 
    data2 = dataTrain.loc[data['Category'] == classNames[i]]
    data2['Description'].str.lower().str.split().apply(catBag.update)

    catDict = set()
    data3 = dataTrain.loc[data['Category'] != classNames[i]]
    data3['Description'].str.lower().str.split().apply(catDict.update)

    catUnique[i] = list(catBag-catDict)
    for j in range(len(data2)):
        if len(catUnique[i]) > 0:
            data22 = data2
            dataTemp.at[data22.index[j], 'Description'] = " ".join(list(set(data22.at[data22.index[j], 'Description'].lower().split()) & set(catUnique[i])))

Однако, выполнение этого кода обновляет текст описания dataTrain, несмотря на то, что на него нет ссылок.Даже когда я изменяю его таким образом, чтобы dataTrain не использовался в качестве входных данных, он все равно обновляется.

Эта проблема означает, что в слове data3 отсутствует больше слов, поскольку неуникальные слова удаляются из ранее обработанных категорий.

Я думаю, что это связано со строками data2 ['Description']. Str.lower (). Str.spl ......, но не уверен, как это исправить.

1 Ответ

0 голосов
/ 21 сентября 2018

В последней строке вы обновляете dataTemp, который аналогичен dataTrain.

Чтобы сделать копию dataTrain, используйте

dataTemp = dataTrain.copy()

В Python, dataTemp = dataTrain только создает новую переменную, которая ссылается на тот же объект.

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