如何解决用Pyspark转换和重命名1,000多个列的最有效方法?
我正在寻找最有效的方法来转换我的原始数据帧中可能存在或可能不存在的大量变量(100+)。列值为1个字节。如果该值不为NULL,则重新编码为1。如果为NUll,则重新编码为0。然后将该列重命名为以'U_'开头。
我的代码有效,但是效率很低。我是Pyspark编码的新手,可以使用一些指针。
update_vars_list = [ 'Col_1','Col_2','Col_3',...'Col_n]
for var in update_vars_list :
if var in original_df.columns:
original_df= original_df.withColumn(('U_'+var),f.when(f.col(var).isNotNull(),1).otherwise(0)).drop(var)
示例:
解决方法
如评论中所述,请尝试使用带有select的表达式:
expr = [ f.when(f.col(var).isNotNull(),1).otherwise(0).alias('U_'+var) for var in update_vars_list if var in original_df.columns]
df = original_df.select(*expr)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。