我有一个带有一些列的数据框df
。我正在尝试做一些事情,我得到了一个奇怪的错误,而不是一个我期待的结果。在
我的想法是为dataframe列的每个不同值生成一个数值,并将对"real_value" : "numeric_value"
添加到字典中。在
保存结果的全局字典是:
dict_res = {}
下一个函数是传递一个值和属性名,根据全局字典“dict_res”中的atr获取字典,如果该值作为键存在于字典中,则返回其数值,如果不是,则生成一个新的数值,定义为float(len(dict_res[atr]) + 1)
。在
下一个代码片段迭代我要从中生成数值的属性,如果在全局字典“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)
....
所以我希望生成一个具有等价性的字典,以及一个具有与字典中相同等价性的新列。在
完成后,我将dict打印如下:
print(dict_res)
我得到的结果是下一个:
{'ATR1': {}, 'ATR2': {}, ...}
所以字典是空的。但最重要的错误是,当我试图显示数据帧“df”时,会出现下一个错误:
KeyError: 'ATR1'
如果我有带那把钥匙的字典怎么可能?在
希望你能帮助我。。。在
我不认为您可以通过只对行操作的
UDF
来更新外部python对象(全局或非全局)。在另一种解决问题的方法是使用
distinct()
: 在相关问题 更多 >
编程相关推荐