You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 23:25:17