我在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 ......行有关,但不确定如何解决。
答案 0 :(得分:0)
在最后一行中,您正在更新dataTemp,它与dataTrain相同。
要复制dataTrain,请使用
dataTemp = dataTrain.copy()
在Python中,dataTemp = dataTrain
仅创建引用相同对象的新变量。