如何在Pyspark中替换数据框的所有Null值

时间:2017-02-18 06:45:27

标签: dataframe null pyspark

我在pyspark中有一个包含300多列的数据框。在这些列中,有一些值为null的列。

例如:

Column_1 column_2
null     null
null     null
234      null
125      124
365      187
and so on

当我想做一个column_1的总和时,我得到的是Null而不是724.

现在我想用空格替换数据框的所有列中的null。因此,当我尝试对这些列求和时,我没有得到空值,但我会得到一个数值。

我们如何在pyspark中实现这一目标

3 个答案:

答案 0 :(得分:39)

您可以使用df.na.fill将零替换为零,例如:

>>> df = spark.createDataFrame([(1,), (2,), (3,), (None,)], ['col'])
>>> df.show()
+----+
| col|
+----+
|   1|
|   2|
|   3|
|null|
+----+

>>> df.na.fill(0).show()
+---+
|col|
+---+
|  1|
|  2|
|  3|
|  0|
+---+

答案 1 :(得分:20)

您可以使用fillna()函数。

>>> df = spark.createDataFrame([(1,), (2,), (3,), (None,)], ['col'])
>>> df.show()
+----+
| col|
+----+
|   1|
|   2|
|   3|
|null|
+----+

>>> df = df.fillna({'col':'4'})
>>> df.show()

or df.fillna({'col':'4'}).show()

+---+
|col|
+---+
|  1|
|  2|
|  3|
|  4|
+---+

答案 2 :(得分:4)

使用 fillna 有 3 个选项...

文档:

<块引用>
def fillna(self, value, subset=None):
   """Replace null values, alias for ``na.fill()``.
   :func:`DataFrame.fillna` and :func:`DataFrameNaFunctions.fill` are aliases of each other.

   :param value: int, long, float, string, bool or dict.
       Value to replace null values with.
       If the value is a dict, then `subset` is ignored and `value` must be a mapping
       from column name (string) to replacement value. The replacement value must be
       an int, long, float, boolean, or string.
   :param subset: optional list of column names to consider.
       Columns specified in subset that do not have matching data type are ignored.
       For example, if `value` is a string, and subset contains a non-string column,
       then the non-string column is simply ignored.

所以你可以:

  1. 用相同的值填充所有列:df.fillna(value)
  2. 传递列的字典 --> 值:df.fillna(dict_of_col_to_value)
  3. 传递一个列列表以填充相同的值:df.fillna(value, subset=list_of_cols)

fillna()na.fill() 的别名,因此它们是相同的。