當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。