PySpark:即使在转换类型后,fillna 函数也不起作用
PySpark: fillna function not working even after casting type
我有一个包含两列的数据框,如下所示:
+----+-----+
|type|class|
+----+-----+
| | 0|
| | 0|
| | 0|
| | 0|
| | 0|
+----+-----+
only showing top 5 rows
我试图用一些任意字符串填充空值,所以我做了以下操作:
df = df.fillna({'type': 'Empty'})
这再次向我展示了相同的结果:
+----+-----+
|type|class|
+----+-----+
| | 0|
| | 0|
| | 0|
| | 0|
| | 0|
+----+-----+
only showing top 5 rows
所以我四处搜索并在 Whosebug 上找到 ,建议不匹配的类型可能会导致此问题,所以我做了:
df = df.withColumn("type", df["type"].cast("string"))
df = df.fillna({'type': 'Empty'})
我不得不提到原始数据框具有以下架构:
StructField(type,StringType,true)
另外,我试过:
df = df.withColumn("type", when(df["type"] != '', df["type"]).otherwise('Empty'))
效果很好。我在这里错过了什么吗? fillna
不是我要找的吗?
fillna
用于替换空值,您的类型列中有 ''
(空字符串);要替换一般值,您可以使用 na.replace
方法:
df.na.replace('', 'Empty String', 'type').show()
+------------+-----+
| type|class|
+------------+-----+
|Empty String| 0|
|Empty String| 0|
+------------+-----+
或者:
df.na.replace({'': 'Empty String'}, 'type').show()
+------------+-----+
| type|class|
+------------+-----+
|Empty String| 0|
|Empty String| 0|
+------------+-----+
或使用 DataFrame.replace
方法,它是 na.replace
的别名:
df.replace('', 'Empty String', 'type').show()
+------------+-----+
| type|class|
+------------+-----+
|Empty String| 0|
|Empty String| 0|
+------------+-----+
我有一个包含两列的数据框,如下所示:
+----+-----+
|type|class|
+----+-----+
| | 0|
| | 0|
| | 0|
| | 0|
| | 0|
+----+-----+
only showing top 5 rows
我试图用一些任意字符串填充空值,所以我做了以下操作:
df = df.fillna({'type': 'Empty'})
这再次向我展示了相同的结果:
+----+-----+
|type|class|
+----+-----+
| | 0|
| | 0|
| | 0|
| | 0|
| | 0|
+----+-----+
only showing top 5 rows
所以我四处搜索并在 Whosebug 上找到
df = df.withColumn("type", df["type"].cast("string"))
df = df.fillna({'type': 'Empty'})
我不得不提到原始数据框具有以下架构:
StructField(type,StringType,true)
另外,我试过:
df = df.withColumn("type", when(df["type"] != '', df["type"]).otherwise('Empty'))
效果很好。我在这里错过了什么吗? fillna
不是我要找的吗?
fillna
用于替换空值,您的类型列中有 ''
(空字符串);要替换一般值,您可以使用 na.replace
方法:
df.na.replace('', 'Empty String', 'type').show()
+------------+-----+
| type|class|
+------------+-----+
|Empty String| 0|
|Empty String| 0|
+------------+-----+
或者:
df.na.replace({'': 'Empty String'}, 'type').show()
+------------+-----+
| type|class|
+------------+-----+
|Empty String| 0|
|Empty String| 0|
+------------+-----+
或使用 DataFrame.replace
方法,它是 na.replace
的别名:
df.replace('', 'Empty String', 'type').show()
+------------+-----+
| type|class|
+------------+-----+
|Empty String| 0|
|Empty String| 0|
+------------+-----+