cph*_*sto 3 python replace dataframe pyspark
我有一个数据框,其中包含欧洲格式的数字,我已将其导入为字符串。逗号为小数,反之亦然-
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)
Run Code Online (Sandbox Code Playgroud)
所需的输出: df.show()
+---------+
| revenue|
+---------+
|-1269.75|
+---------+
df.printSchema()
root
|-- revenue: float (nullable = true)
Run Code Online (Sandbox Code Playgroud)
我正在使用函数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"))
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在下面替换时,我得到了空字符串。为什么??我在期待-1269,75。
df = df.withColumn('revenue', regexp_replace(col('revenue'), ".", ""))
+-------+
|revenue|
+-------+
| |
+-------+
Run Code Online (Sandbox Code Playgroud)
您需要转义.以按字面方式进行匹配,因为.特殊字符可以匹配正则表达式中的几乎所有字符:
df = df.withColumn('revenue', regexp_replace(col('revenue'), "\\.", ""))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3088 次 |
| 最近记录: |