需要将包含数字和字母的字符串拆分为两个



我试图在pyspark数据框架中拆分列的值。考虑柱大小具有诸如"15ML","20GM"等值。我希望它们以这样一种方式分裂,分裂后的输出值变成"15 ML"one_answers"20 GM"。基本上,我试着把数值和它的单位分开。请帮我证明一个解决这个问题的方法。

+--------------+-------------------------+
|size          |new_size(after splitting)|
+--------------+-------------------------+
|         100MG|                   100 MG|
|           1EA|                     1 EA|
|         100MG|                   100 MG|
+--------------+-------------------------+

我已经插入了示例数据和我需要的最终列格式。提前感谢

我尝试使用下面的代码,但我没有得到正确的结果。

from pyspark.sql.functions import split 
df_f = products_size_df.withColumn("new_size", split(products_size_df.size, "MG"))

如果你只想在value和它的单位之间添加空格,你可以像这样使用regexp_replace:

products_size_df.withColumn("new_size", regexp_replace(products_size_df.size, '(d+)', '$1 '))

$1指的是组的个数,所以基本上你只需要找到值并在它后面加上空格


如果您需要为值和单位创建新的列,您可以像这样取regexp_extract:

products_size_df.withColumn("new_value", regexp_extract(products_size_df.size, '(d*)', 1))
products_size_df.withColumn("new_unit", regexp_extract(products_size_df.size, '([A-Za-z]+)', 1))

请注意,如果没有找到group,它将返回空字符串而不是NULL,并且只有当column本身具有NULL值时才返回NULL

可以使用udf分隔字符串中的数字和字母字符:

import re
spark = SparkSession.builder.master("local[*]").getOrCreate()
data = [["100MG"], ["1EA"], ["100MG"]]
df = spark.createDataFrame(data).toDF("size")
def split_func(str):
return re.sub("[A-Za-z]+", lambda ele: " " + ele[0] + " ", str)
split_udf = udf(split_func)
df.withColumn("splitted", split_udf(col("size"))).show()
+-----+--------+
| size|splitted|
+-----+--------+
|100MG| 100 MG |
|  1EA|   1 EA |
|100MG| 100 MG |
+-----+--------+

最新更新