如何在Pyspark DataFrame中使用regex_replace函数替换特殊字符

3

dataframe中有一列batch,其中包含'9%','$5'等值。

我需要使用regex_replace的方式,从上述示例中删除特殊字符并仅保留数字部分。

例如,将同一列中的9%和$5替换为9和5。

3个回答

7
df.withColumn("batch",regexp_replace(col("batch"), "/[^0-9]+/", ""))

创建一个名为“batch”的列,仅包含数字作为值...除数字以外的所有内容都将被替换为空白。 - undefined_variable
抱歉回复晚了。我尝试了你的代码,它运行得很好。非常感谢。 - Chaitanya Kirty
如果我们想要在单个命令中为所有列执行此操作,该怎么办? - dileepvarma
@undefined_variable 我有数百列,所以为每一列添加这个语句很困难。有没有递归的方法?谢谢。 - dileepvarma
1
val cols = df.columns.map(x=>regexp_replace(col(x), "/[^0-9]+/", ""))... df.select(cols:_*) val cols = df.columns.map(x=>regexp_replace(col(x), "/[^0-9]+/", ""))... df.select(cols:_*) - undefined_variable
显示剩余3条评论

2
你可以使用这个正则表达式:
\W+

\W - 匹配任何非单词字符(等同于 [^a-zA-Z0-9_])


1
你目前尝试了什么?
select regexp_replace("'$5','9%'","[^0-9A-Za-z]","")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接