我推测你的原始数据框是这样初始化的:
import pandas as pd
df = pd.DataFrame({'name': ['John Smith',
'Jack A Doe',
'Jane Marie Jones Smith',
'Josh Jacob Jingle Hiemer Schmidt']}) # 等等
这将生成以下输出:
name
0 John Smith
1 Jack A Doe
2 Jane Marie Jones Smith
3 Josh Jacob Jingle Hiemer Schmidt
你可以遍历姓名列表,并将每个姓名拆分为由空格分隔的部分(就像你之前使用的 name_parts = df['name'].str.split(expand = True)
那样)。
然后利用Python列表索引和切片,将列表的第一项(索引为 [0]
)、最后一项(索引为 [-1]
)以及两者之间的所有项(切片 [1:-1]
)分离出来。
new_df = {'first_name': [],
'middle_name': [],
'last_name': []}
for name in df['name']:
name_parts = name.split(" ")
new_df['first_name'].append(name_parts[0]) # 第一部分
new_df['last_name'].append(name_parts[-1]) # 最后一部分
middle_names = ' '.join(name_parts[1:-1]) # 中间的所有部分
new_df['middle_name'].append(middle_names)
new_df = pd.DataFrame(new_df)
最终得到的输出是:
first_name middle_names last_name
0 John Smith
1 Jack A Doe
2 Jane Marie Jones Smith
3 Josh Jacob Jingle Hiemer Schmidt
如果你希望打印时不显示右侧的索引,可以使用 print(df.to_string(index=False))
。