如果只有一些名称具有中间名称,如何在熊猫数据框中拆分名称列?

时间:2019-05-09 20:16:03

标签: python pandas

我正在使用名称的pandas数据框,并且有几种不同的名称格式。一些是“第一”,“最后”,其他是“第一”,“中间”,“最后”,其他是“第一初始”,“第二初始”,“最后”。我想通过使用字符串将它们分为三列。我目前正在尝试使用split函数,但是却收到“ ValueError:列必须与键的长度相同”的信息,因为某些名称将被拆分为两列,而另一些名称将被拆分为三列。我该如何解决?

df = {'name': ['bradley efron', 'c arden pope', 'a l smith']}

mak_df[['First', 'Middle', 'Last']] = mak_df.Author_Name.str.split(" ", expand = True)

2 个答案:

答案 0 :(得分:0)

这是一种解决方法:

import pandas as pd
list_of_names = ['bradley efron', 'c arden pope', 'a l smith']

new_list =[]

for name in list_of_names:
    new_list.append(name.split(" "))

print(new_list)
for name in new_list:
    if (len(name)==2):
        name.insert(1," ")

print(new_list)
df = pd.DataFrame.from_records(new_list).T
df.index = ["first name","middle name","last name"]
df= df.T
print(df)

输出: enter image description here

答案 1 :(得分:0)

也许有更好的方法可以解决此问题,但这就是我所拥有的:

df = {'name': ['bradley efron', 'c arden pope', 'a l smith']}
df=pd.DataFrame(df)
df=df['name'].str.split(' ',expand=True)
df.columns=['first','middle','last']
df['last']=np.where(df['last'].isnull(),df['middle'],df['last'])
df['middle']=np.where((df['middle']==df['last']),'',df['middle'])