数据帧列中动态长度的 Pyspark 字符串数组进行 onehot 编码

2024-01-06

我想转换包含以下字符串的列:

 ["ABC","def","ghi"] 
 ["Jkl","ABC","def"]
 ["Xyz","ABC"]

进入这样的编码列:

 [1,1,1,0,0]
 [1,1,0,1,0]
 [0,1,0,0,1]

pyspark.ml.feature 中有一个类吗?

编辑:在编码列中,第一个条目始终对应于值“ABC”等。1 表示“ABC”存在,而 0 表示它不存在于相应的行中。


你也许可以使用计数向量化器 http://spark.apache.org/docs/2.4.0/api/python/pyspark.ml.html#pyspark.ml.feature.CountVectorizer,下面是一个例子:

Update:删除了删除数组中重复项的步骤,您可以设置binary=True设置 CountVectorizer 时:

from pyspark.ml.feature import CountVectorizer
from pyspark.sql.functions import udf, col

df = spark.createDataFrame([
        (["ABC","def","ghi"],)
      , (["Jkl","ABC","def"],)
      , (["Xyz","ABC"],)
    ], ['arr']
)

创建 CountVectorizer 模型:

cv = CountVectorizer(inputCol='arr', outputCol='c1', binary=True)

model = cv.fit(df)

vocabulary = model.vocabulary
# [u'ABC', u'def', u'Xyz', u'ghi', u'Jkl']

创建 UDF 将向量转换为数组

udf_to_array = udf(lambda v: v.toArray().tolist(), 'array<double>')

获取向量并检查内容:

df1 = model.transform(df)

df1.withColumn('c2', udf_to_array('c1')) \
   .select('*', *[ col('c2')[i].astype('int').alias(vocabulary[i]) for i in range(len(vocabulary))]) \
   .show(3,0)
+---------------+-------------------------+-------------------------+---+---+---+---+---+
|arr            |c1                       |c2                       |ABC|def|Xyz|ghi|Jkl|
+---------------+-------------------------+-------------------------+---+---+---+---+---+
|[ABC, def, ghi]|(5,[0,1,3],[1.0,1.0,1.0])|[1.0, 1.0, 0.0, 1.0, 0.0]|1  |1  |0  |1  |0  |
|[Jkl, ABC, def]|(5,[0,1,4],[1.0,1.0,1.0])|[1.0, 1.0, 0.0, 0.0, 1.0]|1  |1  |0  |0  |1  |
|[Xyz, ABC]     |(5,[0,2],[1.0,1.0])      |[1.0, 0.0, 1.0, 0.0, 0.0]|1  |0  |1  |0  |0  |
+---------------+-------------------------+-------------------------+---+---+---+---+---+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据帧列中动态长度的 Pyspark 字符串数组进行 onehot 编码 的相关文章

随机推荐

  • 基于支持向量的数据重采样器

    我正在努力实现一个数据重采样器以基于support vectors 这个想法是为了适应SVM分类器 得到support vector类的点 然后通过仅选择每个类的支持向量点附近的数据点来平衡数据 以使类具有相同数量的示例 忽略所有其他 远离
  • Google Plus API 错误gapi.loaded_0

    我尝试将 requireJS 与 Google plus API 一起使用 但是当我单击登录按钮时出现错误 这是错误和屏幕截图 GET https apis google com scs apps static js k oz gapi e
  • 如何在pytorch中使用LSTM进行分类?

    我的代码如下 class Mymodel nn Module def init self input size hidden size output size num layers batch size super Discriminato
  • 在非活动类中显示进度对话框

    我正在尝试在非活动类中显示对话框 基本上 我在我的应用程序中检测到一个对象 我想显示一个对话框 然后切换活动 我在 logcat 中收到 java lang RuntimeException 无法在未调用 Looper prepare 的线
  • 链接方法时如何返回 false

    我有一个使用方法链的验证类 我希望能够进行单次检查TRUE FALSE像这样 if obj gt checkSomething 但也有像这样的链方法 if obj gt checkSomething gt checkSomethingEls
  • 将代码转换为 R 中的函数

    我有一系列的步骤 我想将它们转换为函数 因此我只需通过调用它们即可将其应用于数据框 下面是带有一些注释的代码 library textreadr library pdftools library tidyverse library tidy
  • 函数上的模板模板参数

    这是 C 模板中的有效模板构造吗 template lt template
  • 在Qt中鼠标指针下选择Word

    当我在 QTextBrowser 中右键单击时 我需要突出显示并获取鼠标指针下的单词 我已经实施了显示上下文菜单函数为QText浏览器对于鼠标右键单击的事情 但是我无法突出显示鼠标指针下的单词并提取它 我在网上找到了如下解决方案 QText
  • 为什么这个 getchar() 循环在输入一个字符后停止?

    include
  • swig 没有名为 _example 的模块

    我无法在 Windows 上重现基本的 SWIG 示例 我的错误已在 SWIG 文档中说明 我确信我已执行他们提到的 2 个修复 对于这个错误 gt gt gt import example Traceback most recent ca
  • 编辑 php.ini 文件

    我想增加内存限制 最大输入时间 最大执行时间 in WAMP server 有 3 个php ini files 1 C wamp bin apache Apache2 4 4 bin php ini br 2 C wamp bin php
  • AngularJS:ng-bind-html 不适用于按钮标签

    我在 div ng bind html 中动态打印输入类型按钮时遇到问题 HTML 模板
  • 为什么当我更新实体框架模型时 Visual Studio 会删除我的类

    当我更新 EF 模型 版本 5 时 我遇到了一个奇怪的问题 它删除属于该模型的所有类 我的情况是这样的 我更改了两个表的键列 这两个表引用了我的主表 更新模型并未对 edmx 进行这些更改 因此我删除了这三个表 主表和两个查找表 保存了 e
  • Firebase android 无法在测试设备之外工作

    我有这个新应用程序 并添加了 Firebase Firestore 和 Cloud Firestore 用户可以使用邮箱和密码进行注册 并登录成功 然后用户可以在我的个人资料中输入生日并更新信息 问题是这样的 在模拟器中工作正常 在测试设备
  • Oracle:年份必须介于 -4713 和 +9999 之间,并且不能为 0

    我有一个像这样的 Oracle 表 EMPNO HIREDATE INDEX NUM 1 2012 11 13 1 2 2 1 3 2012 11 17 1 4 2012 11 21 1 5 2012 11 24 1 6 2013 11 2
  • Symfony 2.4 从控制器执行命令

    我想从我的控制器执行命令 fos elastica populate 我尝试了该代码 但它不起作用 我得到错误 1 var dump 显示 command fos elastica populate app new Application
  • 将 ASP.NET 菜单控件绑定到 XML

    我正在尝试将我自己的 xml 文件 出于某些特定目的 我不想使用站点地图 绑定到 ASP NET 控件 我有这段代码 在我找到的一些文章的帮助下 应该将 ASP NET 菜单控件绑定到 xml 文件 但事实并非如此 我错过了什么吗 XmlD
  • 调试器(或日志)中类似 NSDictionary 的漂亮打印

    这已经困扰我一段时间了 如何抵消在调试器中转储对象时发生的丑陋转义po foo 或通过NSLog 我尝试了多种方法来实施 description or debugDescription无济于事 鉴于这个简单的类 interface Foo
  • 在 Python 脚本中使用 Scrapy Spider 输出时出现问题

    我想在 python 脚本中使用蜘蛛的输出 为了实现这一点 我根据另一个代码编写了以下代码thread https stackoverflow com questions 40237952 get scrapy crawler output
  • 数据帧列中动态长度的 Pyspark 字符串数组进行 onehot 编码

    我想转换包含以下字符串的列 ABC def ghi Jkl ABC def Xyz ABC 进入这样的编码列 1 1 1 0 0 1 1 0 1 0 0 1 0 0 1 pyspark ml feature 中有一个类吗 编辑 在编码列中