将字符串从K转换为数千等,并在pyspark数据帧中删除字符串之间的空格

2024-07-04 07:30:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想请您帮助转换Pyspark dataframe中一列中的字符串

比如说,, 我有一个名为“df”的数据帧,其结构如下

df = spark.createDataFrame([('David','5K'),('William','6M'),('Sam','1B'),('Ashely','342 1'),('Chloe','240.5 4')], ['Name','Numbers'])

其中K=千,M=百万,B=十亿

我想在这里做的是(1)将字符串从K转换为数千,M转换为数百万,B转换为数十亿,(2)删除“数字”列中字符串之间的空格,然后(3)将其数据类型更改为double。您可以使用正则表达式,但我不想在这种情况下使用熊猫

这将是转换后所需的输出:

Names    |Numbers
---------------------------
David    |5000
William  |6000000
Sam      |1000000000
Ashely   |3421
Chloe    |240.54

我很感谢你们的帮助


Tags: 数据字符串namedataframedfsam结构spark
1条回答
网友
1楼 · 发布于 2024-07-04 07:30:36

您可以使用regexp_replace,然后将“数字”列乘以适当的十次方:

from pyspark.sql.types import *
from pyspark.sql import functions as F
from pyspark.sql.functions import col
from pyspark.sql.functions import *

df.withColumn("Numbers", when(col('Numbers').like("%K"), (regexp_replace('Numbers', 'K', '').cast('double')*1000))\
    .when(col('Numbers').like("%M"), (regexp_replace('Numbers', 'M', '').cast('double')*1000000))\
    .when(col('Numbers').like("%B"), (regexp_replace('Numbers', 'B', '').cast('double')*1000000000))\
    .otherwise((regexp_replace('Numbers', ' ', '').cast('double'))))\
    .show()

输出:

+   -+    -+
|   Name|  Numbers|
+   -+    -+
|  David|   5000.0|
|William|6000000.0|
|    Sam|    1.0E9|
| Ashely|   3421.0|
|  Chloe|   240.54|
+   -+    -+

如果我们有5.5K,那么输出将是5500.0

相关问题 更多 >

    热门问题