【发布时间】:2017-09-25 10:04:44
【问题描述】:
我有一个带有一些列的数据框df。我正在尝试做某事,但我得到了一个奇怪的错误,而不是我期望的结果。
我的想法是为数据框列的每个不同值生成一个数值,并将 "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'
如果我有一本带那个键的字典,这怎么可能?
希望你能帮助我...
【问题讨论】:
标签: python dictionary lambda pyspark key