pandas: How do I split text in a column into multiple rows?

后端 未结 7 1177
说谎
说谎 2020-11-22 09:47

I\'m working with a large csv file and the next to last column has a string of text that I want to split by a specific delimiter. I was wondering if there is a simple way to

7条回答
  •  悲哀的现实
    2020-11-22 10:21

    It may be late to answer this question but I hope to document 2 good features from Pandas: pandas.Series.str.split() with regular expression and pandas.Series.explode().

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame(
        {'CustNum': [32363, 31316],
         'CustomerName': ['McCartney, Paul', 'Lennon, John'],
         'ItemQty': [3, 25],
         'Item': ['F04', 'F01'],
         'Seatblocks': ['2:218:10:4,6', '1:13:36:1,12 1:13:37:1,13'],
         'ItemExt': [60, 360]
        }
    )
    
    print(df)
    print('-'*80+'\n')
    
    df['Seatblocks'] = df['Seatblocks'].str.split('[ :]')
    df = df.explode('Seatblocks').reset_index(drop=True)
    cols = list(df.columns)
    cols.append(cols.pop(cols.index('CustomerName')))
    df = df[cols]
    
    
    print(df)
    print('='*80+'\n')
    print(df[df['CustomerName'] == 'Lennon, John'])
    

    The output is:

       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      360
    --------------------------------------------------------------------------------
    
        CustNum  ItemQty Item Seatblocks  ItemExt     CustomerName
    0     32363        3  F04          2       60  McCartney, Paul
    1     32363        3  F04        218       60  McCartney, Paul
    2     32363        3  F04         10       60  McCartney, Paul
    3     32363        3  F04        4,6       60  McCartney, Paul
    4     31316       25  F01          1      360     Lennon, John
    5     31316       25  F01         13      360     Lennon, John
    6     31316       25  F01         36      360     Lennon, John
    7     31316       25  F01       1,12      360     Lennon, John
    8     31316       25  F01          1      360     Lennon, John
    9     31316       25  F01         13      360     Lennon, John
    10    31316       25  F01         37      360     Lennon, John
    11    31316       25  F01       1,13      360     Lennon, John
    ================================================================================
    
        CustNum  ItemQty Item Seatblocks  ItemExt  CustomerName
    4     31316       25  F01          1      360  Lennon, John
    5     31316       25  F01         13      360  Lennon, John
    6     31316       25  F01         36      360  Lennon, John
    7     31316       25  F01       1,12      360  Lennon, John
    8     31316       25  F01          1      360  Lennon, John
    9     31316       25  F01         13      360  Lennon, John
    10    31316       25  F01         37      360  Lennon, John
    11    31316       25  F01       1,13      360  Lennon, John
    

提交回复
热议问题