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

PySpark基于when条件替换DataFrame列值的问题求助

问题分析与解决方案

问题根源

你的代码存在三个核心问题:

  1. 重复且冗余的when条件:两个when使用完全相同的判断逻辑,第一个条件满足后第二个不会触发,逻辑设计错误。
  2. 错误的列引用方式:regexp_replace的第一个参数传入了字符串'country_code_iso3',而非列对象,导致实际是对字符串字面量进行替换操作,而非DataFrame列的值。
  3. 不必要的regexp_replace使用:针对null值,regexp_replace无法生效;且你的需求本质是直接覆盖值,而非正则替换,用regexp_replace完全多余。

正确代码实现

你的核心需求是:只要country_code以UA-开头,就将country_code_iso3设置为UKR,不管原有值是null还是UA。直接赋值即可实现,无需正则替换:

from pyspark.sql.functions import when, col

df = df.withColumn('country_code_iso3', 
    when(col('country_code').startswith('UA-'), 'UKR')
   .otherwise(col('country_code_iso3'))
)

代码解释

  • 使用col('country_code')明确引用DataFrame列(也可使用df.country_code)。
  • 当country_code满足UA-开头的条件时,直接赋值字符串'UKR',完美覆盖null和UA两种情况。
  • 不满足条件时,保留原列的原始值。

执行后即可得到你期望的结果:

|country_code|country_code_iso3|
|       UA-09|              UKR|
|       UA-14|              UKR|
|       UA-43|              UKR|

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:15:43