gpt4 book ai didi

python - 删除pyspark列表中的单引号

转载 作者:行者123 更新时间:2023-11-28 22:09:34 24 4
gpt4 key购买 nike

我有一个像这样的数据框。 colA 包含项目列表,但它存储在像这样的引号下

data = [(("ID1", "['valA', 'valB']")), (("ID1", "[]")), (("ID1", "['valC']")), (("ID1", ""))]
df = spark.createDataFrame(data, ["ID", "colA"])
df.show()

+---+----------------+
| ID| colA|
+---+----------------+
|ID1|['valA', 'valB']|
|ID2| []|
|ID3| ['valC']|
|ID4| |
+---+----------------+

colA 具有空白和空列表值。

我想清理此列,以便我拥有以下 DataFrame

+---+------------+
| ID| colA|
+---+------------+
|ID1|[valA, valB]|
|ID2| null|
|ID3| [valC]|
|ID4| null|
+---+------------+

最佳答案

步骤:

  1. 删除开始 ^['| 结束 ']$ 括号。 \ 用于转义,^ 用于字符串开头,$ 用于字符串结尾
  2. 将空列表 [] 转换为空字符串,再次使用 \ 转义
  3. 删除空字符串
  4. 通过'、'','分割来分隔元素,?表示可选空格

代码

from pyspark.sql import functions as f

data = [(("ID1", "['valA', 'valB']")), (("ID1", "[]")), (("ID1", "['valC']")), (("ID1", ""))]
df = spark.createDataFrame(data, ["ID", "colA"])

df_2 \
.withColumn('colA_2', f.regexp_replace('colA', "^\['|'\]$", '')) \
.withColumn('colA_2', f.regexp_replace('colA_2', "\[\]", '')) \
.withColumn('colA_2', f.when(f.col('colA_2') == "", None).otherwise(f.col('colA_2'))) \
.withColumn('colA_2', f.split('colA_2', "', ?'"))

输出

df_2.show()

+---+----------------+------------+
| ID| colA| colA_2|
+---+----------------+------------+
|ID1|['valA', 'valB']|[valA, valB]|
|ID1| []| null|
|ID1| ['valC']| [valC]|
|ID1| | null|
+---+----------------+------------+
df_2.printSchema()

root
|-- ID: string (nullable = true)
|-- colA: string (nullable = true)
|-- colA_2: array (nullable = true)
| |-- element: string (containsNull = true)

关于python - 删除pyspark列表中的单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57603538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com