尽管未被引用,Python中的代码段仍在不断更改Dataframe内容

时间:2018-09-21 14:43:27

标签: python dataframe

我在Python中具有以下数据框,其中“数据” =由两列字符串组成的完整数据集,即“描述”和“类别”。

“ dataTrain”是“数据”的子集

“ catBag”是特定“类别”行中“说明”中使用的所有单词的列表

“ catDict”是所有其他“类别”行中“说明”中使用的所有单词的列表。

“ catUnique”向我返回特定类别唯一的所有单词。

嵌套循环将“描述”文本替换为该行类别唯一的单词。

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 :(得分:0)

在最后一行中,您正在更新dataTemp,它与dataTrain相同。

要复制dataTrain,请使用

dataTemp = dataTrain.copy()

在Python中,dataTemp = dataTrain仅创建引用相同对象的新变量。