dataframe - 如何以正确的格式以科学记数法显示 PySpark 数据框中的列
问题描述
假设我在 pyspark 中有一个数据框,如下所示:
+---------+---------+
| col1 | col2 |
+---------+---------+
|3.34567e4| 45876549|
+---------+---------+
|4.4781e8 | 7856549 |
+---------+---------+
我想保持col1
科学计数法,但显示小数点后 2 位的数字。我也想改成col2
科学格式。所以结果应该如下:
+---------+---------+
| col1 | col2 |
+---------+---------+
| 3.35e4 | 4.59e7 |
+---------+---------+
| 4.48e8 | 7.86e6 |
+---------+---------+
我搜索了很多,但我没有找到任何答案。
解决方案
您可以使用pyspark.sql.functions.format_string
,它允许您应用printf
样式格式来显示结果。
在这种情况下,您可以使用格式字符串"%.2e"
来格式化具有 2 个小数点的指数(科学)表示法的浮点数。
例如:
from pyspark.sql.functions import col, format_string
df.select(*[format_string("%.2e", col(c).cast("float")).alias(c) for c in df.columns]).show()
#+--------+--------+
#| col1| col2|
#+--------+--------+
#|3.35e+04|4.59e+07|
#|4.48e+08|7.86e+06|
#+--------+--------+
请注意,结果列是字符串(而不是数字)。
推荐阅读
- amazon-web-services - 有没有办法在不使用额外的 AWS Lambda 来检查授权的情况下将 S3 Bucket 与 Appsync 集成?
- python - 我的代码在 python shell 中运行良好,但在我的 Visual Studio 代码上运行时没有显示任何内容
- php - Laravel DD api 不显示完整数组
- javascript - 二进制搜索中开始结束索引的混淆
- twilio - 使用 API 或 HTTP POST 编辑 Twilio TwiML
- c++ - 如何在 OMNeT++ 中使用 NetworKit 作为库?
- java - Cplex 获取目标函数的系数
- laravel - Laravel 查询错误 - htmlspecialchars() 期望参数 1 是字符串,给定对象
- mysql - 梳理搜索结果以使用 UNION 还是有其他方法
- php - 有没有办法重写 WordPress 管理员的 URL 以使用重写 API 向用户隐藏它/添加重写规则而不使用 mod_rewrite