regex - 删除 pyspark 中的特定前导零
问题描述
我想删除pyspark中一列的特定数量的前导零?
如果您可以看到我只想删除前导零只有一个的零。那么输出应该是:
+-----------+-----------------+
|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", remove_lead_zero("subcategory", 1)).show()
+-----------+-------+
|subcategory| output|
+-----------+-------+
| 00EEE| 00EEE|
| 0000EEE|0000EEE|
| 0EEE| EEE|
+-----------+-------+
推荐阅读
- java - Spring @GetMapping 返回空数组
- javascript - 如何在我的 javascript 测验中将显示问题的区域居中?
- python - ipyleaflet draw_control 不处理“全部清除”按钮
- javascript - HTML CSS 如何使用 JavaScript 从 2D 表格制作动态多列表
- c# - 如何在没有偏移的文本文件中存储日期时间 +05:30
- python - 为什么opencv中resize的插值比PIL差?
- python - 当函数使用 lambda 参数时如何使用模拟
- php - Laravel Lumen 5.7,调试栏抛出调用成员函数监听 null
- regex - 在正则表达式中将单词添加到字符类
- python - 如果列元素是一个集合,如何从熊猫数据框列中获取每个值的计数?