在Pysp上应用lambda函数时dict中的键错误

2024-05-19 01:46:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有一些列的数据框df。我正在尝试做一些事情,我得到了一个奇怪的错误,而不是一个我期待的结果。在

我的想法是为dataframe列的每个不同值生成一个数值,并将对"real_value" : "numeric_value"添加到字典中。在

保存结果的全局字典是:

dict_res = {}

下一个函数是传递一个值和属性名,根据全局字典“dict_res”中的atr获取字典,如果该值作为键存在于字典中,则返回其数值,如果不是,则生成一个新的数值,定义为float(len(dict_res[atr]) + 1)。在

^{pr2}$

下一个代码片段迭代我要从中生成数值的属性,如果在全局字典“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'

如果我有带那把钥匙的字典怎么可能?在

希望你能帮助我。。。在


Tags: 数据lambda函数indf字典属性value
1条回答
网友
1楼 · 发布于 2024-05-19 01:46:58

我不认为您可以通过只对行操作的UDF来更新外部python对象(全局或非全局)。在

另一种解决问题的方法是使用distinct(): 在

dict_res = dict()
for column in columns_to_index:
    dict_res[column] = df.select(column).distinct().toPandas().to_dict()

相关问题 更多 >

    热门问题