如何组合两个数据框替换空值

Posted

技术标签:

【中文标题】如何组合两个数据框替换空值【英文标题】:how to combine two dataframe replacing null values 【发布时间】:2020-05-20 17:09:58 【问题描述】:

我有两个数据框。它们中的列集略有不同 df1:

+---+----+----+----+                                                            
| id|col1|col2|col3|
+---+----+----+----+
|  1|  15|  20|   8|
|  2|   0|null|   5|
+---+----+----+----+

df2:

+---+----+----+----+
| id|col1|col2|col4|
+---+----+----+----+
|  1|  10|  10|  40|
|  2|  10|  30|  50|
+---+----+----+----+

pyspark 如何为 df1 进行左连接?但同时用 df2 中的值替换空值?并且还添加了 df2 中缺少的列

结果_df:

id  col1 col2 col3 col4
 1    15   20    8   40
 2     0   30    5   50

我需要将两个带有 id 的数据框组合起来得到一个额外的列 col4,对于 col1、col2、col3,从 df1 中取值,除非该值非零,然后用 df2 中的值替换它。

【问题讨论】:

【参考方案1】:

left 加入后使用 coalesce 函数。

from pyspark.sql.functions import *
df1.show()
#+---+----+----+----+
#| id|col1|col2|col3|
#+---+----+----+----+
#|  1|  15|  20|   8|
#|  2|   0|null|   5|
#+---+----+----+----+

df2.show()
#+---+----+----+----+----+
#| id|col1|col2|col3|col4|
#+---+----+----+----+----+
#|  1|  15|  20|   8|  40|
#|  2|   0|  30|   5|  50|
#+---+----+----+----+----+

df1.join(df2,["id"],"left").\
select("id",coalesce(df2.col1,df1.col1).alias("col1"),coalesce(df2.col2,df1.col2).alias("col2"),coalesce(df2.col3,df1.col3).alias("col3"),df2.col4).\
show()
+---+----+----+----+----+
| id|col1|col2|col3|col4|
+---+----+----+----+----+
|  1|  15|  20|   8|  40|
|  2|   0|  30|   5|  50|
+---+----+----+----+----+

【讨论】:

以上是关于如何组合两个数据框替换空值的主要内容,如果未能解决你的问题,请参考以下文章

数据框用唯一的纪元时间替换每一行空值

Scala:如何组合两个数据框?

如何在熊猫中合并两个数据框以替换 nan

java - 如何在java中组合(连接)具有相同列名的两个数据框

如何将两个组合框的选定项与单个数据源分开?

加入多个表后如何处理空值