程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

按字符长度拆分数据帧

发布于2023-03-21 14:23     阅读(462)     评论(0)     点赞(7)     收藏(0)


我有一张桌子

--------------------|
Val
--------------------|
1, M A ,HELLO,WORLD |
2, M 1A,HELLO WORLD |
---------------------

我想拆分上面的数据框,以便它包含下面的三列。

----------------------
a | b   | c          |
----------------------
1 | M A | HELLO,WORLD|
1 | M 1A| HELLO WORLD|
----------------------

I have used the below code, but it does not work as expected. Is there a way to contain all characters after 5 characters in column c, etc. and character 2-5 in column b?

df = df.withColumn('Splitted', F.split(hadf37dr_df['Val'], ',')).withColumn('a', F.col('Splitted')[0]).withColumn('b', F.col('Splitted')[1]).withColumn('c', F.col('Splitted')[2])

解决方案


如果你想在PySpark中这样做,你需要F.concat_ws连接列表的元素并将其作为字符串返回,你需要F.slice将列表的元素从'head'中切片为指定的'length'。因为您需要设置长度,所以您需要F.size可以拥有的数组的大小

(
    df
    .withColumn('Splitted', F.split(df['val'], ','))
    .withColumn('a', F.col('Splitted')[0])
    .withColumn('b', F.col('Splitted')[1])
    .withColumn(
        'c',
        F.concat_ws(
            ',',
            F.slice('Splitted', 3,  F.size('Splitted') - 2)))
).show()

输出:

+-------------------+--------------------+---+-----+-----------+
|                val|            Splitted|  a|    b|          c|
+-------------------+--------------------+---+-----+-----------+
|1, M A ,HELLO,WORLD|[1,  M A , HELLO,...|  1| M A |HELLO,WORLD|
|2, M 1A,HELLO WORLD|[2,  M 1A, HELLO ...|  2| M 1A|HELLO WORLD|
+-------------------+--------------------+---+-----+-----------+


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1944123/79f1710963b3d0c0ed59/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

7 0
收藏该文
已收藏

评论内容:(最多支持255个字符)