如果我已经有一个由OneHotEncoderEstimator创建的列,我怎么能动态删除其中一个级别?
假设您有一个包含4个级别的列(一个因为依赖而丢弃),并且您希望删除第二级(即将其置于拦截中)。
所以,从类似的东西
row, fruit , encoded
1 , apple , [1, 0, 0]
2 , orange, [0, 1 ,0]
3 , pear , [0, 0, 1]
至
row, fruit , encoded
1 , apple , [1, 0]
2 , orange, [0, 1]
3 , pear , [0, 0]
面临的挑战之一是,OneHotEncoderEstimator返回 SparseVector 的每一行。我甚至不确定如何删除向量的“正确”索引,因为我所拥有的只是列名和级别。
我知道我可以删除行并重新编码,但我正在努力避免这种情况。
有谁知道如何在Python / Spark 2.3中做到这一点?
先创建这个DataFrame。
myValues = [(1,'apple',[1,0,0]),(2,'orange',[0,1,0]),(3,'pear',[0,0,1])]
df = sqlContext.createDataFrame(myValues,['row','fruit','encoded'])
df.show() | ||
---|---|---|
row | fruit | encoded |
1 | apple | [1,0,0] |
2 | orange | [0,1,0] |
3 | pear | [0,0,1] |
现在,让我们删除第3个元素。size() - 它返回存储在列中的数组或列表的长度。
from pyspark.sql.functions import size
df = df.withColumn('encoded', df.encoded[:size(df.encoded)-1])
df.show() | ||
---|---|---|
row | fruit | encoded |
1 | apple | [1,0] |
2 | orange | [0,1] |
3 | pear | [0,0] |
+----+----------+--------+
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。