【问题标题】:Conditional string manipulation in PysparkPyspark 中的条件字符串操作
【发布时间】:2020-10-29 08:43:21
【问题描述】:

我有一个 Pyspark 数据框,其中包括一列 MSN(字符串类型),如下所示:

+------+
| Col1 |
+------+
| 654- |
| 1859 |
| 5875 |
| 784- |
| 596- |
| 668- |
| 1075 |
+------+

如您所见,那些值小于 1000(即三个字符)的条目末尾有一个 - 字符,总共有 4 个字符。

我想摆脱那个- 字符,所以我最终会得到类似的东西:

+------+
| Col2 |
+------+
| 654  |
| 1859 |
| 5875 |
| 784  |
| 596  |
| 668  |
| 1075 |
+------+

我尝试了以下代码(其中df 是包含该列的数据框,但它似乎不起作用:

if df.Col1[3] == "-":
        df = df.withColumn('Col2', df.series.substr(1, 3))
        return df
else:
        return df

有人知道怎么做吗?

【问题讨论】:

    标签: pyspark


    【解决方案1】:

    您可以使用 F.regexp_replace 将列中的 - 替换为空字符串 ("")

    请看下面的代码,

    df.withColumn("Col2", F.regexp_replace("Col1", "-", "")).show()
    
    +----+----+
    |Col1|Col2|
    +----+----+
    |589-| 589|
    |1245|1245|
    |145-| 145|
    +----+----+
    

    【讨论】:

      【解决方案2】:

      这是使用.substr() 方法的解决方案:

      df.withColumn("Col2", F.when(F.col("Col1").substr(4, 1) == "-", 
                                   F.col("Col1").substr(1, 3)
                            ).otherwise(
                                   F.col("Col1"))).show()
      
      +----+----+
      |Col1|Col2|
      +----+----+
      |654-| 654|
      |1859|1859|
      |5875|5875|
      |784-| 784|
      |596-| 596|
      |668-| 668|
      |1075|1075|
      +----+----+
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-23
        • 2020-05-28
        • 2019-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-24
        相关资源
        最近更新 更多