微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除pyspark中的特定前导零

如何解决删除pyspark中的特定前导零

我要删除pyspark中一列的前导零的特定数目吗?

如果您看到我只想删除前导零仅为1的零,那么输出应为:

+-----------+-----------------+
|subcategory|output           |
+-----------+-----------------+
|      00EEE|            00EEE|
|    0000EEE|           000EEE|
|       0EEE|              EEE| 
+-----------+-----------------+

类似地,如果我想从零开始,前导零为2,则输出应为:

+-----------+-----------------+
|subcategory|output           |
+-----------+-----------------+
|      00EEE|              EEE|
|    0000EEE|           000EEE|
|       0EEE|             0EEE| 
+-----------+-----------------+

有什么办法吗?

解决方法

我创建了一个通用函数来删除前导“ 0”,具体取决于您想要的数字:

from pyspark.sql import functions as F

def remove_lead_zero(col,n):
    """
    col: name of the column you want to modify
    n: number of leading 0 you want to remove
    """
    return F.when(
        F.regexp_extract(col,"^0{{{n}}}[^0]".format(n=n),0) != "",F.expr("substring({col},{n},length({col}))".format(col=col,n=n+1))
    ).otherwise(F.col(col))


df.withColumn("output",remove_lead_zero("subcategory",2)).show()
+-----------+-------+
|subcategory| output|
+-----------+-------+
|      00EEE|    EEE|
|    0000EEE|0000EEE|
|       0EEE|   0EEE|
+-----------+-------+

df.withColumn("output",1)).show()
+-----------+-------+
|subcategory| output|
+-----------+-------+
|      00EEE|  00EEE|
|    0000EEE|0000EEE|
|       0EEE|    EEE|
+-----------+-------+

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。