我有一個包含某些列的數據框df
。我正在嘗試做一些事情,而我得到一個奇怪的錯誤,而不是我期待的結果。在字典中應用lambda函數時出現鍵錯誤
我的想法是爲dataframe列的每個不同值生成一個數值,並將這對"real_value" : "numeric_value"
添加到字典中。
全局字典,其中保存的結果是:
dict_res = {}
我有一個功能是傳遞一個值和屬性名,獲取字典根據從全局字典「dict_res」的ATR,如果該值作爲字典中的鍵存在,返回其數值,如果不是,則生成一個新的數值,定義爲float(len(dict_res[atr]) + 1)
。
def indexMethod(value, atr):
global dict_res
res = float(len(dict_res[atr]) + 1)
if value in dict_res[atr]:
res = dict_res[atr][value]
else:
dict_res[atr][value] = res
return res
在屬性下面的代碼片段遍歷我想生成一個數值,如果沒有創建到全局字典詞典相當於屬性「dict_res」創建它,然後用應用lambda函數是上面指定的方法。
for column in columns_to_index:
udf_func = UserDefinedFunction(lambda value: indexMethod(value, column), DoubleType())
if(not column in dict_res):
dict_res[column] = {}
col2 = udf_func(df[column])
df = df.withColumn('newCol', col2)
....
因此,我希望是產生與等價的字典,以及與那些同樣等價的新列在詞典中。
的過程之後,我打印字典如下:
print(dict_res)
而結果我得到的是下一個:
{'ATR1': {}, 'ATR2': {}, ...}
所以字典是空的。但最顯著的錯誤是,當我試圖表明數據框「DF」我得到了一個錯誤:
KeyError: 'ATR1'
這怎麼可能,如果我有該鍵的字典?
希望你能幫助我...
時,我有一個數據幀,它不會被escaled更是有用的。但是,如果稍後我還要處理新數據,並且我想將結果與字典'dict_res'中已獲得的結果結合起來?無論如何,感謝您的迴應! – jartymcfly
您可以使用'subtract',然後'distinct'並將新數據附加到現有字典中。 – MaFF