我有一個列型別為 的資料集StringType()。這些貨幣列中的值包含縮寫,如K和M。
我想洗掉 'K' 和 'M' 并將它們分別乘以 1000 或 1000000 以表示 K/M。我嘗試創建一個函式并使用它在資料框中添加一個新列。我不斷收到以下錯誤
ValueError:無法將列轉換為布林值:請使用“&”表示“and”、“|” 在構建 DataFrame 布爾運算式時,'or' 表示,'~' 表示'not'。
列值如下:

def convertall(ReleaseClause):
if ReleaseClause == None:
return 0
elif expr("substring(ReleaseClause,-1,length(ReleaseClause))")=='K':
remove_euro=expr("substring(ReleaseClause,2,length(ReleaseClause))")
remove_K=translate(remove_euro,'K','')
remove_Kint=remove_K.cast(IntegerType())*lit(1000)
return remove_Kint
elif expr("substring(ReleaseClause,-1,length(ReleaseClause))")=='M':
remove_euro=expr("substring(ReleaseClause,2,length(ReleaseClause))")
remove_M=translate(remove_euro,'M','')
remove_Mint=remove_M.cast(IntegerType())*lit(1000000)
return remove_Mint
else:
return ReleaseClause
uj5u.com熱心網友回復:
以下代碼使用 F.when() 函式轉換資料。在此之前,將字串拆分為字母,然后提取 M/K 符號,以及要相乘的數量。此解決方案假設字串大小保持不變,并且 M/K 符號的位置以及數量資料在行之間不可變。
import pyspark.sql.functions as F
data = [("$12.3M",),
("$23.4K",),
("$12.5M",),
("$22.3K",)]
df = spark.createDataFrame(data, schema=["ReleaseClause"])
df_ans = (df
.select("ReleaseClause",
(F.split("ReleaseClause",'').alias("split")))
.withColumn("scale", F.col("split")[5])
.withColumn("amount",
F.concat(F.col("split")[1], F.col("split")[2],
F.col("split")[3], F.col("split")[4])
.cast("double"))
.withColumn("scaled", F.when(F.col("scale")=="K",
F.col("amount")*1000)
.when(F.col("scale")=="M",
F.col("amount")*1000000))
這產生輸出為

uj5u.com熱心網友回復:
您可以檢查值是否包含K或M,提取數字并相乘。
例子:
data = [("$12.3M",), ("$23.4K",), ("$12.5M",), ("$22.3K",)]
df = spark.createDataFrame(data, schema=["ReleaseClause"])
df = df.withColumn(
"result",
F.when(
F.col("ReleaseClause").contains("K"),
F.regexp_extract(F.col("ReleaseClause"), "(\d (.\d )?)", 1).cast(DoubleType())
* 1000,
)
.when(
F.col("ReleaseClause").contains("M"),
F.regexp_extract(F.col("ReleaseClause"), "(\d (.\d )?)", 1).cast(DoubleType())
* 1000000,
)
.cast(IntegerType()),
)
結果:
------------- --------
|ReleaseClause|result |
------------- --------
|$12.3M |12300000|
|$23.4K |23400 |
|$12.5M |12500000|
|$22.3K |22300 |
------------- --------
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/365214.html
標籤:Python 阿帕奇火花 火花 apache-spark-sql
