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

如何在PySpark DataFrame中限制小数位数并为列值添加百分号

问题说明

你需要将PySpark DataFrame的Result列保留两位小数后拼接%符号,原代码运行出现属性错误。

错误原因

你的代码存在两处核心问题:

  1. lit()是pyspark.sql.functions模块下的工具函数,不是DataFrame的内置方法,不能直接接在DataFrame对象后调用,这是触发AttributeError的直接原因。
  2. withColumn的参数顺序错误,正确参数顺序为withColumn(列名, 列计算逻辑),你原代码的参数顺序和逻辑拼接方式不符合PySpark语法要求。
正确实现代码

首先导入需要的依赖函数:

from pyspark.sql.functions import col, concat, lit, format_number

如果你的DataFrame已经存在计算完成的double类型Result列,直接格式化即可:

df = spark.read.csv(src_path, header=True, encoding='ISO-8859-1')
df = df.withColumn("Result", concat(format_number(col("Result"), 2), lit("%")))

如果你需要先通过Month_start和Month_end计算Result再格式化,使用如下写法:

df = spark.read.csv(src_path, header=True, encoding='ISO-8859-1')
df = df.withColumn("Result", concat(
    format_number(col("Month_start")/col("Month_end")*100, 2),
    lit("%")
))
逻辑说明
  • format_number(col("Result"), 2):将double类型的数值保留2位小数,返回字符串格式的结果
  • concat(..., lit("%")):将格式化后的数值字符串和%符号拼接,得到最终需要的带百分号的结果
    运行后即可得到你预期的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:54:00