我希望用相邻列的值替换一个列中的空值,例如如果我有:
A|B
0,1
2,null
3,null
4,2
我希望它变成:
A|B
0,1
2,2
3,3
4,2
尝试过
df.na.fill(df.A,"B")
但是没有起作用,它说值应该是float、int、long、string或dict。
有什么想法吗?
我希望用相邻列的值替换一个列中的空值,例如如果我有:
A|B
0,1
2,null
3,null
4,2
我希望它变成:
A|B
0,1
2,2
3,3
4,2
尝试过
df.na.fill(df.A,"B")
但是没有起作用,它说值应该是float、int、long、string或dict。
有什么想法吗?
另一个答案。
如果下面的df1
是您的数据框:
rd1 = sc.parallelize([(0,1), (2,None), (3,None), (4,2)])
df1 = rd1.toDF(['A', 'B'])
from pyspark.sql.functions import when
df1.select('A',
when( df1.B.isNull(), df1.A).otherwise(df1.B).alias('B')
)\
.show()
df.rdd.map(lambda row: row if row[1] else Row(a=row[0],b=row[0])).toDF().show()
注意:coalesce 不会 替换NaN
值,只替换null
:
import pyspark.sql.functions as F
>>> cDf = spark.createDataFrame([(None, None), (1, None), (None, 2)], ("a", "b"))
>>> cDf.show()
+----+----+
| a| b|
+----+----+
|null|null|
| 1|null|
|null| 2|
+----+----+
>>> cDf.select(F.coalesce(cDf["a"], cDf["b"])).show()
+--------------+
|coalesce(a, b)|
+--------------+
| null|
| 1|
| 2|
+--------------+
None
条目的pandas.DataFrame
,将其转换为spark.DataFrame
并再次使用coalesce
:>>> cDf_from_pd = spark.createDataFrame(pd.DataFrame({'a': [None, 1, None], 'b': [None, None, 2]}))
>>> cDf_from_pd.show()
+---+---+
| a| b|
+---+---+
|NaN|NaN|
|1.0|NaN|
|NaN|2.0|
+---+---+
>>> cDf_from_pd.select(F.coalesce(cDf_from_pd["a"], cDf_from_pd["b"])).show()
+--------------+
|coalesce(a, b)|
+--------------+
| NaN|
| 1.0|
| NaN|
+--------------+
DataFrame
中的 NaN
转换为 null
。