I believe need Series.str.rsplit
with n=2
for spliting by only 2 last whitespaces:
df[['Name','Country','Digit']] = df['Note'].str.rsplit(n=2, expand=True)
equals too:
df[['Name','Country','Digit']] = df['Note'].str.rsplit(' ', n=2, expand=True)
Proof:
import pandas as pd
df = pd.DataFrame({
'ID': [1,2,3,4],
'Note': [
'Sam John Brazil 2',
'Simion Canada 4',
'Sam John Brazil 1',
'Henry G. Hilson Spain 3']
})
df[['Name','Country','Digit']] = df['Note'].str.rsplit(n=2, expand=True)
print(df)
Returns:
ID Note Name Country Digit
0 1 Sam John Brazil 2 Sam John Brazil 2
1 2 Simion Canada 4 Simion Canada 4
2 3 Sam John Brazil 1 Sam John Brazil 1
3 4 Henry G. Hilson Spain 3 Henry G. Hilson Spain 3
Add this: (if Digit column is to be numeric)
df['Digit'] = pd.to_numeric(df['Digit'], errors='coerce')
Details:
#print(df['Note'].str.rsplit(n=2, expand=True))
0 1 2
0 Sam John Brazil 2
1 Simion Canada 4
2 Sam John Brazil 1
3 Henry G. Hilson Spain 3