如何拆分 Dataframe 列值并只取前两个字符串作为新列

nszi6y05  于 2022-10-07  发布在  Spark
关注(0)|答案(3)|浏览(1086)

我在dataframe中有一个列,它的字符串值如下

"Hardware part not present"
"Software part not present"
null
null

我想拆分WRT“”,只取前2个字符串到新列,如果它是空的,那么即使新列值也应该是空的。如何做到这一点呢?

需要的结果

column                               New column
Hardware part not present           Hardware part
Software part not present           Software part
null                                null
null                                null

如何使用pyspark或python来实现这一点

62lalag4

62lalag41#

您可以使用substring_index函数。

import pyspark.sql.functions as F

......
df = df.withColumn('New column', F.substring_index('column', ' ', 2))
deikduxw

deikduxw2#

Pandas有一种内置的分裂方法。在这里,您可以定义拆分的总数,以限制拆分进入字符串的深度。

df[“existingcol”].str.split(n=2, expand=true)

这将为您提供3列。然后只需连接前2个,然后删除任何不必要的COLS。

参考文档:https://pandas.pydata.org/docs/reference/api/pandas.Series.str.split.html

它默认在空格上拆分,但如果您认为其中会有逗号或其他东西,则始终可以在正则表达式模式上拆分。

5n0oy7gb

5n0oy7gb3#

在pyspark中,您可以使用concat_wsslicesplit函数来实现这一点。

import pyspark.sql.functions as func

data_sdf. 
    withColumn('text_frst2', 
               func.when(func.col('text').isNotNull(), 
                         func.concat_ws(' ', func.slice(func.split('text', ' '), 1, 2))
                         )
               ). 
    show(truncate=False)

# +----------------------------+-------------+

# |text                        |text_frst2   |

# +----------------------------+-------------+

# |software part is not present|software part|

# |hardware part is not present|hardware part|

# |null                        |null         |

# |foo bar baz                 |foo bar      |

# +----------------------------+-------------+
  • split将根据提供的分隔符(在本例中为" ")拆分文本
  • slice将保留从第k个位置开始的N个元素(在本例中为N=2K=1)
  • concat_ws连接由提供的分隔符(在本例中为" ")分隔的数组元素
  • 我使用when()仅使用对非空值的操作,因为这会为空值生成空格/空白值

相关问题