I have a Pandas Series containing Several strings Patterns as below:
stringsToSplit = ['6  Wrap',
                  '1  Salad , 2  Pepsi , 2  Chicken Wrap',
                  '1  Kebab Plate  [1  Bread ]',
                  '1 Beyti Kebab , 1  Chicken Plate  [1  Bread ], 1 Kebab Plate  [1  White Rice ], 1 Tikka Plate  [1  Bread ]',
                  '1 Kebab Plate [1  Bread , 1  Rocca Leaves ], 1  Mountain Dew '
                 ]
s = pd.Series(stringsToSplit)
s
0                                              6  Wrap
1                1  Salad , 2  Pepsi , 2  Chicken Wrap
2                          1  Kebab Plate  [1  Bread ]
3    1 Beyti Kebab , 1  Chicken Plate  [1  Bread ],...
4    1 Kebab Plate [1  Bread , 1  Rocca Leaves ], 1...
dtype: object
I would like to split and explode it such that the result would be as follows:
0 6 Wrap 1 1 Salad 1 2 Pepsi 1 2 Chicken Wrap 2 1 Kebab Plate [1 Bread ] 3 1 Beyti Keba 3 1 Chicken Plate [1 Bread ] 3 1 Kebab Plate [1 White Rice ] 3 1 Tikka Plate [1 Bread ] 4 1 Kebab Plate [1 Bread , 1 Rocca Leaves ] 4 1 Mountain Dew
In order to do the explode I need to first split. However, if I use split(',') that also splits the items between [] which I do not want.
I have tried using split using regex but was not able to find the correct pattern.
I would appreciate the support.
Advertisement
Answer
You can use a regex with a negative lookahead:
s.str.split(r's*,(?![^[]]*])').explode()
output:
0 6 Wrap 1 1 Salad 1 2 Pepsi 1 2 Chicken Wrap 2 1 Kebab Plate [1 Bread ] 3 1 Beyti Kebab 3 1 Chicken Plate [1 Bread ] 3 1 Kebab Plate [1 White Rice ] 3 1 Tikka Plate [1 Bread ] 4 1 Kebab Plate [1 Bread , 1 Rocca Leaves ] 4 1 Mountain Dew dtype: object
