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

如何在PySpark DataFrame中仅对非全大写记录应用Initcap

PySpark 对非全大写字符串列应用Initcap函数

需求:对DataFrame指定列(如Country)应用initcap函数,但仅针对非全大写的记录执行转换,全大写的记录保持原内容。

解决方案

使用PySpark的when条件函数结合upper函数判断字符串是否为全大写:

  • 如果目标列值等于其全大写版本,说明是全大写,直接保留原内容
  • 否则,对该值应用initcap函数

完整代码示例

# 准备数据
data = [(1, "Italy"), 
        (2, "italy"), 
        (3, "USA"), 
        (4, "China"), 
        (5, "china")
]
 
# 创建DataFrame
columns = ["ID", "Country"]
df = spark.createDataFrame(data=data, schema=columns)

# 应用转换逻辑
from pyspark.sql.functions import col, initcap, upper, when

df_transformed = df.withColumn(
    "Country",
    when(col("Country") == upper(col("Country")), col("Country"))
    .otherwise(initcap(col("Country")))
)

# 查看结果
df_transformed.show(truncate=False)

执行结果

+---+-------+
|ID |Country|
+---+-------+
|1  |Italy  |
|2  |Italy  |
|3  |USA    |
|4  |China  |
|5  |China  |
+---+-------+

完全符合预期:全大写的"USA"保持不变,其他非全大写的字符串被转换为首字母大写、其余小写的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:10:49