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

时间:2017-05-26 17:15:41

标签: python pandas

我有一个包含列'name'的数据框。像'詹姆斯卡梅隆'这样的价值观。我想将它拆分为2个新列'First_Name'和'Last_Name',但数据中没有分隔符,所以我不太清楚如何。我意识到'詹姆斯'处于位置[0]并且'卡梅隆'处于位置[1],但我不确定你能否认识到没有分隔符

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

编辑:

对于我提供的数据框架,Vaishali的回答完美无缺。我创建了该数据帧作为示例。我的真实代码看起来像这样“

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

而且不幸的是,这是一个错误:

'Columns must be same length as key'

该列包含与我的示例相同的值。有什么建议吗?

由于

3 个答案:

答案 0 :(得分:10)

你可以分割空间

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

编辑:处理错误'列必须与密钥长度相同'。数据可能有一些具有多个空格的名称,例如:George Martin Jr.在这种情况下,一种方法是分割空格并使用第一个和第二个字符串,如果存在则忽略第三个

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

答案 1 :(得分:1)

这样做的方式略有不同:

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

答案 2 :(得分:1)

我喜欢这种方法......不像简单拆分那么快,但它以非常方便的方式在列名中删除。

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