我的 pyspark 数据框中有 500 列……有些是字符串类型,有些是 int 和一些布尔值(100 个布尔值列)。现在,所有布尔列都有两个不同的级别 - 是和否,我想将它们转换为 1⁄0
对于字符串,我有三个值——通过、失败和空值。如何用 0 替换这些空值? fillna(0) 仅适用于整数
c1| c2 | c3 |c4|c5..... |c500
yes| yes|passed |45....
No | Yes|failed |452....
Yes|No |None |32............
当我做
df.replace(yes,1)
我收到以下错误:
ValueError: Mixed type replacements are not supported
原文由 Emma 发布,翻译遵循 CC BY-SA 4.0 许可协议
对于字符串,我有三个值——通过、失败和空值。如何用 0 替换这些空值? fillna(0) 仅适用于整数
首先,导入 when 和 lit
假设您的 DataFrame 有这些列
您可以使用:
我可以用 0 替换具有 null 的值
您问题的第 1 部分:是/否布尔值 - 您提到过,布尔值有 100 列。为此,我通常用更新的值重建表或创建一个 UDF 返回 1 或 0 表示是或否。
我正在向 DataFrame (df) 添加另外两列 can_vote 和 can_lotto
假设您有与 can_vote 和 can_lotto 相似的列(布尔值为是/否)
您可以使用以下代码行来获取 DataFrame 中具有布尔类型的列
这将返回一个列表
您可以创建一个 UDF 并为此类列表中的每一列迭代,使用 1(是)或 0(否)点亮每一列。
作为参考,请参考以下链接