当前位置: 首页 > 知识库问答 >
问题:

如何在pyspark数据帧中将左联接操作的输出中的空值替换为0?

谭梓
2023-03-14

我有一个简单的PySpark数据框架,df1-

df1 = spark.createDataFrame([
    ("u1", 1),
    ("u1", 2),
    ("u2", 3),
    ("u3", 4),

    ],
    ['user_id', 'var1'])

print(df1.printSchema())
df1.show(truncate=False)

输出-

root
 |-- user_id: string (nullable = true)
 |-- var1: long (nullable = true)

None
+-------+----+
|user_id|var1|
+-------+----+
|u1     |1   |
|u1     |2   |
|u2     |3   |
|u3     |4   |
+-------+----+

我有另一个PySpark数据帧df2-

df2 = spark.createDataFrame([
    (1, 'f1'),
    (2, 'f2'),

    ],
    ['var1', 'var2'])

print(df2.printSchema())
df2.show(truncate=False)

输出-

root
 |-- var1: long (nullable = true)
 |-- var2: string (nullable = true)

None
+----+----+
|var1|var2|
+----+----+
|1   |f1  |
|2   |f2  |
+----+----+

我必须连接上面提到的两个数据帧,通过对它们使用左连接操作-

df1.join(df2, df1.var1==df2.var1, 'left').show()

输出-

+-------+----+----+----+
|user_id|var1|var1|var2|
+-------+----+----+----+
|     u1|   1|   1|  f1|
|     u1|   2|   2|  f2|
|     u2|   3|null|null|
|     u3|   4|null|null|
+-------+----+----+----+

但如您所见,我在有两个表不匹配的行中获得空值。如何将所有空值替换为0?

共有2个答案

柳鸿信
2023-03-14

您可以在连接后重命名列(否则会得到同名列),并使用字典指定要如何填充缺少的值:

f1.join(df2, df1.var1 == df2.var1, 'left').select(
    *[df1['user_id'], df1['var1'], df2['var1'].alias('df2_var1'), df2['var2'].alias('df2_var2')]
).fillna({'df2_var1': 0, 'df2_var2': '0'}).show()

输出:

+-------+----+--------+--------+
|user_id|var1|df2_var1|df2_var2|
+-------+----+--------+--------+
|     u1|   1|       1|      f1|
|     u2|   3|       0|       0|
|     u1|   2|       2|      f2|
|     u3|   4|       0|       0|
+-------+----+--------+--------+
湛铭
2023-03-14

您可以使用< code>fillna。需要两个fillnas来说明整数和字符串列。

df1.join(df2, df1.var1==df2.var1, 'left').fillna(0).fillna("0")
 类似资料:
  • 我在pyspark中有一个超过300列的数据帧。在这些列中,有些列的值为null。 例如: 当我想对列u 1求和时,结果得到的是Null,而不是724。 现在,我想用空格替换数据框所有列中的null。因此,当我尝试对这些列求和时,我不会得到null值,但会得到一个数值。 我们如何在pyspark中实现这一点

  • 本文向大家介绍如何在R数据帧中将空值转换为NA?,包括了如何在R数据帧中将空值转换为NA?的使用技巧和注意事项,需要的朋友参考一下 当我们的数据包含空值时,很难执行分析,我们可能会将这些空值转换为NA,以便我们了解不可用的值的数量。这可以通过使用单个方括号来完成。 示例 请看以下具有一些空值的数据框- 将空值转换为NA-

  • 在从< code>RDD制作< code >数据帧时,我遇到了一个错误。 我收到以下错误: py spark . SQL . utils . parse exception:u " \ nmis matched input ' '应为{'SELECT ',' FROM ',' ADD ',' AS ',' ALL ',' DISTINCT ',' WHERE ',' GROUP ',' BY ',

  • 我有一个包含n列的数据帧,我想用空值替换所有这些列中的空字符串。 我试过用 和 他们两个都没有工作。 如有任何线索,我们将不胜感激。谢谢

  • 本文向大家介绍如何将NA替换为R数据帧中选定列的值?,包括了如何将NA替换为R数据帧中选定列的值?的使用技巧和注意事项,需要的朋友参考一下 在数据分析中,在数据框中查找某些NA值非常普遍,但如果包含NA值的列对分析无用,则所有NA值都不会产生问题。我们可以将所有NA值替换为0或将其他有用的列替换为其他值。 示例 请看以下数据帧- 将NA的连续列更改为零- 将NA的非连续列更改为零-

  • 我有两个数据帧 df1 和 df2。我正在尝试加入(左加入) DF1: df2: Final=df1.join(df2,on=['ID'],how='left') 但是,如果值为空,我想用column值填充 列 预期输出: 解决方案,我能想到的是,一旦连接完成,我可以检查的值,如果为空,则替换为。如果有其他优雅的解决方法,请告诉我。谢谢。