当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PySpark DataFrame replace方法用法及代码示例


PySpark DataFrame 的 replace(~) 方法返回一个新的 DataFrame,其中某些值被替换。我们还可以指定要在哪些列中执行替换。

参数

1.to_replace | booleannumberstringlistdict | optional

要替换的值。

2. value | booleannumberstringNone | optional

替换 to_replace 的新值。

3. subset | list | optional

要关注的列。默认情况下,将检查所有列是否进行替换。

返回值

PySpark 数据帧。

例子

考虑以下PySpark DataFrame:

df = spark.createDataFrame([["Alex", 25], ["Bob", 30], ["Cathy", 40]], ["name", "age"])
df.show()



+-----+---+
| name|age|
+-----+---+
| Alex| 25|
|  Bob| 30|
|Cathy| 40|
+-----+---+

替换单列的值

要将 name 列中的值 "Alex" 替换为 "ALEX"

df.replace("Alex", "ALEX", "name").show()



+-----+---+
| name|age|
+-----+---+
| ALEX| 25|
|  Bob| 30|
|Cathy| 40|
+-----+---+

请注意,返回了一个新的PySpark DataFrame,并且原始DataFrame 保持不变。

替换单个列的多个值

要将 name 列中的值 "Alex" 替换为 "ALEX",将 "Bob" 替换为 "BOB"

df.replace(["Alex","Bob"], ["ALEX","BOB"], "name").show()



+-----+---+
| name|age|
+-----+---+
| ALEX| 25|
|  BOB| 30|
|Cathy| 40|
+-----+---+

用单个值替换多个值

要将 name 列中的值 "Alex""Bob" 替换为 "SkyTowner"

df.replace(["Alex","Bob"], "SkyTowner", "name").show()



+---------+---+
|     name|age|
+---------+---+
|SkyTowner| 25|
|SkyTowner| 30|
|    Cathy| 40|
+---------+---+

替换整个DataFrame中的值

要将整个 DataFrame 中的值 "Alex""Bob" 替换为 "SkyTowner"

df.replace(["Alex","Bob"], "SkyTowner").show()



+---------+---+
|     name|age|
+---------+---+
|SkyTowner| 25|
|SkyTowner| 30|
|    Cathy| 40|
+---------+---+

在这里,请注意我们没有指定 subset 选项。

使用字典替换值

要使用字典在 name 列中将 "Alex" 替换为 "ALEX",并将 "Bob" 替换为 "BOB"

df.replace({
 "Alex": "ALEX",
 "Bob": "Bob",
}, subset=["name"]).show()
警告

不允许混合类型更换。例如,以下行为是不允许的:

df.replace({
 "Alex": "ALEX",
 30: 99,
}, subset=["name","age"]).show()



ValueError: Mixed type replacements are not supported

在这里,我们执行一项字符串替换和一项整数替换。由于这是 mix-typed 替换,因此 PySpark 会引发错误。为了避免此错误,请分别执行两次替换。

替换多列中的多个值

考虑以下 DataFrame :

df = spark.createDataFrame([["aa", "AA"], ["bb", "BB"]], ["col1", "col2"])
df.show()



+----+----+
|col1|col2|
+----+----+
|  aa|  AA|
|  bb|  BB|
+----+----+

要替换 col1col2 中的某些值:

df.replace({
 "AA": "@@@",
 "bb": "###",
}, subset=["col1","col2"]).show()



+----+----+
|col1|col2|
+----+----+
|  aa| @@@|
| ###|  BB|
+----+----+

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 PySpark DataFrame | replace method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。