2017-05-26 75 views
3

我有一個數據框,它有'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' 

列保存爲我的例子相同的價值觀,雖然任何建議

感謝

回答

6

您可以分割空間

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

0

這樣做的方式略有不同:

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 
0

我喜歡這種方法...不是那麼快,簡單地分裂,但在列名滴在一個非常方便的方式。

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