Python-pandas:如何将一列中的文本分成多行?

发布于 2021-02-02 23:16:35

我正在处理一个较大的csv文件,并且最后一列的旁边是一串文本,我想用一个特定的定界符来分割它。我想知道是否有使用pandas或python的简单方法?

CustNum  CustomerName     ItemQty  Item   Seatblocks                 ItemExt
32363    McCartney, Paul      3     F04    2:218:10:4,6                   60
31316    Lennon, John        25     F01    1:13:36:1,12 1:13:37:1,13     300

我想先按空格(' ')(':')Seatblocks列中按冒号分开,但每个单元格将导致列数不同。我具有重新排列列的功能,因此Seatblocks列位于工作表的末尾,但是我不确定从那里开始如何做。我可以使用内置text-to-columns函数和快速宏在excel中完成此操作,但是我的数据集记录太多,无法处理excel

最终,我想记录约翰·列侬的记录并创建多行,并将每组座位的信息放在单独的行上。

关注者
0
被浏览
125
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    这将座垫按空间划分,并给每个单独的行。

    In [43]: df
    Out[43]: 
       CustNum     CustomerName  ItemQty Item                 Seatblocks  ItemExt
    0    32363  McCartney, Paul        3  F04               2:218:10:4,6       60
    1    31316     Lennon, John       25  F01  1:13:36:1,12 1:13:37:1,13      300
    
    In [44]: s = df['Seatblocks'].str.split(' ').apply(Series, 1).stack()
    
    In [45]: s.index = s.index.droplevel(-1) # to line up with df's index
    
    In [46]: s.name = 'Seatblocks' # needs a name to join
    
    In [47]: s
    Out[47]: 
    0    2:218:10:4,6
    1    1:13:36:1,12
    1    1:13:37:1,13
    Name: Seatblocks, dtype: object
    
    In [48]: del df['Seatblocks']
    
    In [49]: df.join(s)
    Out[49]: 
       CustNum     CustomerName  ItemQty Item  ItemExt    Seatblocks
    0    32363  McCartney, Paul        3  F04       60  2:218:10:4,6
    1    31316     Lennon, John       25  F01      300  1:13:36:1,12
    1    31316     Lennon, John       25  F01      300  1:13:37:1,13
    

    或者,将每个冒号分隔的字符串放在自己的列中:

    In [50]: df.join(s.apply(lambda x: Series(x.split(':'))))
    Out[50]: 
       CustNum     CustomerName  ItemQty Item  ItemExt  0    1   2     3
    0    32363  McCartney, Paul        3  F04       60  2  218  10   4,6
    1    31316     Lennon, John       25  F01      300  1   13  36  1,12
    1    31316     Lennon, John       25  F01      300  1   13  37  1,13
    

    这有点丑陋,但也许有人会采用更漂亮的解决方案。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看