如何以正确的格式以科学记数法显示 PySpark 数据框中的列
Posted
技术标签:
【中文标题】如何以正确的格式以科学记数法显示 PySpark 数据框中的列【英文标题】:How to show a column in a PySpark dataframe in the scientific notation with proper format 【发布时间】:2019-01-18 19:31:48 【问题描述】:假设我在 pyspark 中有如下数据框:
+---------+---------+
| col1 | col2 |
+---------+---------+
|3.34567e4| 45876549|
+---------+---------+
|4.4781e8 | 7856549 |
+---------+---------+
我想以科学计数法保留col1
,但显示小数点后 2 位的数字。我还想将col2
更改为科学格式。所以结果应该如下:
+---------+---------+
| col1 | col2 |
+---------+---------+
| 3.35e4 | 4.59e7 |
+---------+---------+
| 4.48e8 | 7.86e6 |
+---------+---------+
我搜索了很多,但没有找到任何答案。
【问题讨论】:
【参考方案1】:您可以使用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|
#+--------+--------+
请注意,结果列是字符串(而不是数字)。
【讨论】:
谢谢,但我希望它们是数字而不是字符串。 @user2356563 您可以将数字保留为数字并在显示时转换为字符串(调用show
)。换句话说:你无法改变数字的内部表示——你只能操纵它的打印方式。以上是关于如何以正确的格式以科学记数法显示 PySpark 数据框中的列的主要内容,如果未能解决你的问题,请参考以下文章