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

PySpark中无法移除括号:处理含(Imps)的Decimal类型数据

问题:移除字符串中的括号内容并转换为decimal类型

我有格式为7,432,818 (Imps)的数据,需要加载到decimal(20,3)类型的列中。尝试用regexp_replace移除(Imps),但括号未被移除,使用的代码如下:

validated_df=validated_df.withColumn('MeasurePer', F.regexp_replace('MeasurePer', ',', ''))
validated_df=validated_df.withColumn('MeasurePer', F.regexp_replace('MeasurePer', '(Imps)', ''))

得到的结果为:7432818 ()


解决方案

括号()在正则表达式中属于特殊元字符(用于定义捕获组),直接写(Imps)会被解析成捕获Imps这个字符串,而不会匹配实际的括号。需要对括号进行转义,或者使用原始字符串来避免转义问题。

方法1:转义括号

# 分两步替换:先去逗号,再移除(Imps)
validated_df = validated_df.withColumn('MeasurePer', F.regexp_replace('MeasurePer', ',', ''))
validated_df = validated_df.withColumn('MeasurePer', F.regexp_replace('MeasurePer', '\\(Imps\\)', ''))

方法2:合并替换(更高效)

可以用正则的或条件|一步完成逗号和(Imps)的移除:

validated_df = validated_df.withColumn(
    'MeasurePer',
    F.regexp_replace('MeasurePer', r',|\(Imps\)', '')
)

最终转换为decimal类型

处理完字符串后,需要将其转换为目标类型:

validated_df = validated_df.withColumn(
    'MeasurePer',
    F.regexp_replace('MeasurePer', r',|\(Imps\)', '').cast('decimal(20,3)')
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:24:25