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

如何仅移除DataFrame数值中的逗号而保留字符串中的逗号?

解决方案

要实现只移除纯数值字符串中的逗号,同时保留含非数字内容的字符串里的逗号,可以结合when条件判断和正则表达式来处理:

代码实现(Scala 示例)

import org.apache.spark.sql.functions._

// 处理COST列
val processedDF = df.withColumn("COST",
  // 判断当前字符串是否为纯数值格式(支持带千位分隔符和小数点)
  when(col("COST").rlike("^\\d+(,\\d+)*\\.\\d+$|^\\d+(,\\d+)*$"),
    // 纯数值则移除所有逗号
    regexp_replace(col("COST"), ",", "")
  ).otherwise(
    // 非纯数值则保持原内容
    col("COST")
  )
)

正则说明

  • 匹配纯数值的正则^\\d+(,\\d+)*\\.\\d+$|^\\d+(,\\d+)*$:
    • ^\\d+(,\\d+)*\\.\\d+$:匹配带小数点的数值(如1,350.45)
    • ^\\d+(,\\d+)*$:匹配整数形式的数值(如11,340)
  • 只有符合上述纯数值格式的行,才会执行逗号移除操作,其他含字母、文本的行完全保留原内容。

为什么你之前的代码不行

你用的regexp_replace(df("COST"), "\\p{Sc}|,", "")会匹配所有逗号,不管它是在数值里还是字符串里,所以会把N,A、A,B,C.30这类字符串中的逗号也一并删除,不符合需求。

如果需要支持负数数值,只需把匹配纯数值的正则修改为^-?\\d+(,\\d+)*\\.\\d+$|^-?\\d+(,\\d+)*$即可。

内容的提问来源于stack exchange,提问作者ConfusedDeveloper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:12:31