You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark DataFrame转Python列表后如何访问名称不固定的动态列

报错原因

你写的s3_list[0].j.Month是尝试访问Row对象中名为j的属性下的Month子属性,而不是读取j.Month变量存储的动态列名字符串,因此会触发属性不存在的报错。

正确访问方法

PySpark的Row对象支持两种动态访问不定名字段的方式:

方法1:字典下标访问(最简洁)

直接把存储列名的变量放在方括号内即可,修正后代码如下:

for i in uniqueProduct_list:
    s3_df = channel_Result_8_df.filter((f.col("product") == i.product) & (f.col("S") == 3))
    s3_list =  s3_df.rdd.map(lambda x: x).collect()
    for j in month_list:
        # 传入j.Month存储的列名字符串访问对应字段
        print(s3_list[0][j.Month])
        break
    break

方法2:先转字典再访问(适合批量处理字段场景)

先调用Row对象的asDict()方法转为普通Python字典,再用动态键访问:

for i in uniqueProduct_list:
    s3_df = channel_Result_8_df.filter((f.col("product") == i.product) & (f.col("S") == 3))
    s3_list =  s3_df.rdd.map(lambda x: x).collect()
    # 转为字典
    row_dict = s3_list[0].asDict()
    for j in month_list:
        print(row_dict[j.Month])
        break
    break

注意事项

确保j.Month返回的字符串和DataFrame中的列名完全一致,无大小写、空格差异,避免出现KeyError。

内容的提问来源于stack exchange,提问作者Pardeep Naik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:45:04