假设我有一个dataframe,其中的值列如下:

ABC00909083888
ABC93890380380
XYZ7394949
XYZ3898302
PQR3799_ABZ
MGE8983_ABZ

我想修剪这些值,比如,删除前3个字符,如果以ABZ结尾,则删除最后3个字符.

00909083888
93890380380
7394949
3898302
3799
8983

try 了一些方法,但没有奏效.

from pyspark.sql import functions as f

new_df = df.withColumn("new_column", f.when((condition on some column),
                                               f.substring('Existing_COL', 4, f.length(f.col("Existing_COL"))), ))
       

谁能告诉我pyspark中可以使用哪种功能.

推荐答案

基于您的输入和预期输出.参见下面的逻辑-

from pyspark.sql.functions import *

df = spark.createDataFrame(data = [("ABC00909083888",) ,("ABC93890380380",) ,("XYZ7394949",) ,("XYZ3898302",) ,("PQR3799_ABZ",) ,("MGE8983_ABZ",)], schema = ["values",])

(df.withColumn("new_vals", when(col('values').rlike("(_ABZ$)"), regexp_replace(col('values'),r'(_ABZ$)', '')).otherwise(col('values')))
  .withColumn("final_vals", expr(("substring(new_vals, 4 ,length(new_vals))")))
).show()

Output

+--------------+--------------+-----------+
|        values|      new_vals| final_vals|
+--------------+--------------+-----------+
|ABC00909083888|ABC00909083888|00909083888|
|ABC93890380380|ABC93890380380|93890380380|
|    XYZ7394949|    XYZ7394949|    7394949|
|    XYZ3898302|    XYZ3898302|    3898302|
|   PQR3799_ABZ|       PQR3799|       3799|
|   MGE8983_ABZ|       MGE8983|       8983|
+--------------+--------------+-----------+

Python相关问答推荐

Tkinter滑动条标签.我不确定如何删除滑动块标签或更改其文本

从DataFrame.apply创建DataFrame

Python中是否有方法从公共域检索搜索结果

返回nxon矩阵的diag元素,而不使用for循环

Python 3.12中的通用[T]类方法隐式类型检索

Python daskValue错误:无法识别的区块管理器dask -必须是以下之一:[]

未删除映射表的行

查找两极rame中组之间的所有差异

PMMLPipeline._ fit()需要2到3个位置参数,但给出了4个位置参数

Python中绕y轴曲线的旋转

基于索引值的Pandas DataFrame条件填充

Pandas计数符合某些条件的特定列的数量

Pandas DataFrame中行之间的差异

为什么Django管理页面和我的页面的其他CSS文件和图片都找不到?'

try 检索blob名称列表时出现错误填充错误""

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

跳过嵌套JSON中的级别并转换为Pandas Rame

当条件满足时停止ODE集成?

使用tqdm的进度条

将字节序列解码为Unicode字符串