DataFrame连接后列选择报SyntaxError,请求排查语法问题
解决DataFrame连接后select方法中的列选择语法错误
你的问题出在table[*col_list]这部分——Python语法不允许在方括号(索引操作符)内使用*进行列表解包,这直接导致了语法错误。
要实现“选择第一个DataFrame所有列+第二个DataFrame指定列”的需求,你可以用以下两种方式修正代码:
方法1:生成列对象列表后解包
通过列表推导式逐个获取table的目标列对象,再用*解包列表传递给select:
col_list = ['price', 'total'] out = out.join(table, on=['ID1', 'ID2']).select(out['*'], *[table[col] for col in col_list])
方法2:直接传入列名(无冲突时适用)
如果两个DataFrame的列名没有冲突,也可以直接把指定列名作为参数传入select:
col_list = ['price', 'total'] out = out.join(table, on=['ID1', 'ID2']).select(out['*'], *col_list)
补充说明
PySpark的select方法接受可变数量的列对象或列名字符串作为参数,但不接受直接传入另一个DataFrame(比如table[col_list]返回的是DataFrame,不能直接放到select里)。所以必须把目标列拆解成单个参数传递,这就是用*解包列表的原因。
内容的提问来源于stack exchange,提问作者hhp
相关产品推荐
相关产品推荐

