lassence.net

Field notes from the AI frontier

Split values into columns of a pandas DataFrame

--- archive: codebook, 2020–2023 · topic: Pandas ---

Setup

# Import libraries
import pandas as pd
import numpy as np

Split string and expand result in columns

Apply function str.split() to the column, with parameter expand=True

# Create sample DataFrame
df = pd.DataFrame({'name':['John A. Doe', 'Aby K. Parker', 'Bob T. Morris', 'Alice D. Allen']})
df
name
0John A. Doe
1Aby K. Parker
2Bob T. Morris
3Alice D. Allen
# Split string and create multiple columns
df['name'].str.split(expand=True)
012
0JohnA.Doe
1AbyK.Parker
2BobT.Morris
3AliceD.Allen

If you want to extract only the nth element in the resulting list, you can simply use .str[n]:

# Just take the last value of the list of splitted string
df['name'].str.split().str[-1]
0       Doe
1    Parker
2    Morris
3     Allen
Name: name, dtype: object

Split lists into columns

If you have list-like values in a column, and want to select some values and expand them into columns, specify result_type='expand' to apply()

# Create sample DataFrame
df2 = pd.Series([np.random.randint(0, 9, size=5) for i in range(5)]).to_frame()
df2
0
0[1, 2, 3, 2, 7]
1[5, 6, 5, 8, 3]
2[4, 0, 2, 5, 3]
3[0, 4, 3, 0, 0]
4[3, 0, 1, 4, 8]

Extract some values without expansion:

# Extract some values without expansion
df2.apply(lambda x: (x[0][0], x[0][-1]), axis=1)
0    (1, 7)
1    (5, 3)
2    (4, 3)
3    (0, 0)
4    (3, 8)
dtype: object

Expand result into columns:

# Expand result to columns
df2.apply(lambda x: [x[0][0], x[0][-1]], result_type='expand', axis=1)
01
017
153
243
300
438