将列值拆分为2个新列 - Python Pandas

问题描述:

我有一个数据框,它有'name'列。像'詹姆斯卡梅隆'这样的价值观。我想将它分成2个新列'First_Name'和'Last_Name',但数据中没有分隔符,所以我不太确定如何。我意识到,“詹姆斯”处于[0],“卡梅伦”处于[1],但我不知道你能认识到,没有分隔符将列值拆分为2个新列 - Python Pandas

df = pd.DataFrame({'name':['James Cameron','Martin Sheen'], 
       'Id':[1,2]}) 
df 

编辑:

AZ”对于我提供的数据框,下面的答案完美无缺。作为一个例子,我创建了这个数据框。我真正的代码看起来像这样”

data[['First_Name','Last_Name']] = data.director_name.str.split(' ', expand = True) 

而且不幸的是,抛出一个错误:?

'Columns must be same length as key' 

列保存为我的例子相同的价值观,虽然任何建议

感谢

您可以分割空间

df[['Name', 'Lastname']] = df.name.str.split(' ', expand = True) 

    Id name   Name Lastname 
0 1 James Cameron James Cameron 
1 2 Martin Sheen Martin Sheen 

编辑:处理错误'列必须与键的长度相同'。这些数据可能有一些名字与一个以上的空间,如:乔治·马丁小在这种情况下,一种方法是分裂的空间,并使用第一和第二个字符串,忽略第三,如果它存在

df['First_Name'] = df.name.str.split(' ', expand = True)[0] 
df['Last_Name'] = df.name.str.split(' ', expand = True)[1] 
+0

@ JD2775,pl请参阅编辑以处理错误 – Vaishali

这样做的方式略有不同:

df[['first_name', 'last_name']] = df.apply(lambda row: row['name'].split(), axis=1) 

df 
    Id   name first_name last_name 
0 1 James Cameron  James Cameron 
1 2 Martin Sheen  Martin  Sheen 

我喜欢这种方法...不是那么快,简单地分裂,但在列名滴在一个非常方便的方式。

df.join(df.name.str.extract('(?P<First>\S+)\s+(?P<Last>\S+)', expand=True)) 

    Id   name First  Last 
0 1 James Cameron James Cameron 
1 2 Martin Sheen Martin Sheen