PySpark DataFrame拆分数值与单位列的解决方案求助
解决PySpark DataFrame中数值与单位的拆分问题
你的问题在于原代码仅针对"MG"单位处理,且split函数返回的是数组而非拼接好的带空格字符串,无法满足通用场景需求。以下是两种可行方案:
方案一:直接用正则替换插入空格
使用regexp_replace配合正则表达式,匹配数字与单位的边界并插入空格,支持所有数字+字母格式的单位:
from pyspark.sql.functions import regexp_replace df_f = products_size_df.withColumn( "new_size", regexp_replace("size", r"(\d+)([A-Za-z]+)", r"$1 $2") )
说明
正则表达式(\d+)([A-Za-z]+)会将size列的值拆分为两个捕获组:
$1:连续的数值部分(如100、1)$2:连续的字母单位部分(如MG、EA)
替换时在两组之间添加空格,直接得到数值 单位的格式。
方案二:拆分后再拼接(便于单独使用数值/单位)
如果后续需要单独操作数值或单位列,可以先分别提取两部分,再用空格拼接:
from pyspark.sql.functions import regexp_extract, concat_ws df_f = products_size_df.withColumn( "numeric_part", regexp_extract("size", r"(\d+)", 1) ).withColumn( "unit_part", regexp_extract("size", r"[A-Za-z]+", 0) ).withColumn( "new_size", concat_ws(" ", "numeric_part", "unit_part") )
说明
regexp_extract("size", r"(\d+)", 1):提取字符串中的连续数值部分regexp_extract("size", r"[A-Za-z]+", 0):提取字符串中的连续字母单位部分concat_ws(" ", ...):用空格将数值和单位拼接成目标格式
运行上述任意方案后,即可得到与样例一致的new_size列结果。
内容的提问来源于stack exchange,提问作者Darshan Pratheep
相关产品推荐
相关产品推荐

