Multi-valued Series not able to be applied to DataFrame columns

Hello all. Why is my dimension-matching Series object not able to be used to populate these columns? Odder even is the fact that by forcing an index subscript, I get a non-failure (though not the result I truly want).

-Thoughts?

import pandas as pd
df = pd.DataFrame({'Name':['John Q Public', 'Mark K Smith']})
print(df['Name'].apply(lambda x: x.split()))
df[['first','middle','last']] = df['Name'].apply(lambda x: x.split())[0]
print(df)
df[['first','middle','last']] = df['Name'].apply(lambda x: x.split())  

Output:

0    [John, Q, Public]
1     [Mark, K, Smith]
Name: Name, dtype: object
            Name first middle    last
0  John Q Public  John      Q  Public
1   Mark K Smith  John      Q  Public
...
ValueError: Columns must be same length as key

I think this is what is happening:

When you use the apply method, it creates a Series, which means only one dimension, each element is a list.

When you try to assign to the DataFrame, pandas coerce the Series to a DataFrame, with just one column, each row being a list. So the dimensions don’t match.

When you select one element of the Series, you get a list with 3 elements.

When you try to assign to the DataFrame, pandas coerces the list to a DataFrame with 3 columns and one row. Now the dimensions match, pandas assign this row to every row on the original DataFrame.

Try this:

df[['first', 'middle', 'last']] = df['Name'].apply(lambda x: x.split()).to_list()

The to_list method turns the Series into a list of lists, and on assignment, pandas coerces it into a DataFrame of the correct dimensions.

Of course, this only works if each name is split in exactly 3 parts.