如何在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
相关产品推荐
相关产品推荐

