【问题标题】:Replace string in PySpark替换 PySpark 中的字符串
【发布时间】:2019-04-04 21:32:14
【问题描述】:

我有一个数据框,其中包含欧洲格式的数字,我将其作为字符串导入。逗号作为十进制,反之亦然 -

from pyspark.sql.functions import regexp_replace,col
from pyspark.sql.types import FloatType
df = spark.createDataFrame([('-1.269,75',)], ['revenue'])
df.show()
+---------+
|  revenue|
+---------+
|-1.269,75|
+---------+
df.printSchema()
root
 |-- revenue: string (nullable = true)

所需的输出: df.show()

+---------+
|  revenue|
+---------+
|-1269.75|
+---------+
df.printSchema()
root
 |-- revenue: float (nullable = true)

我使用函数regexp_replace首先用空格替换点 - 然后用空点替换逗号,最后转换成floatType。

df = df.withColumn('revenue', regexp_replace(col('revenue'), ".", ""))
df = df.withColumn('revenue', regexp_replace(col('revenue'), ",", "."))
df = df.withColumn('revenue', df['revenue'].cast("float"))

但是,当我尝试在下面替换时,我得到空字符串。为什么??我期待-1269,75

df = df.withColumn('revenue', regexp_replace(col('revenue'), ".", ""))
+-------+
|revenue|
+-------+
|       |
+-------+

【问题讨论】:

    标签: python dataframe replace pyspark


    【解决方案1】:

    您需要转义. 以匹配它,因为. 是正则表达式中matches almost any character 的特殊字符:

    df = df.withColumn('revenue', regexp_replace(col('revenue'), "\\.", ""))
    

    【讨论】:

      猜你喜欢
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2016-08-30
      • 1970-01-01
      • 2020-02-25
      • 2016-08-22
      相关资源
      最近更新 更多