2017-02-24 29 views
1

我想弄清楚如何從列中的一組字詞中刪除一個字詞並將刪除的字詞插入到新列中。我想出瞭如何刪除列的一部分並將其插入到一個新行中,但我無法弄清楚如何針對某個特定的詞(按照我的設想,「先生」總是第二個詞;或者可能是通過第一間詞「」和「的。)這也是始終恆定在我的數據集。新列中的部分字符串片段(或字符串拆分?)

Name    Age New_Name 
Doe, Mr. John  23  Mr. 
Anna, Mrs. Fox 33  Mrs. 

編輯的上面添加另一行

我如何會刪除」先生「從名稱列插入到」New_Name「列中?

到目前爲止我已經拿出:

data['New_name'] = data.Name.str[:2] 

雖然這不允許我專門針對「先生」。

我想我必須使用一個string.split,但確切的代碼是躲避我。

回答

2

如果先生總是在你的榜樣指示相同的位置,這可以用列表來實現插值:

df['New_Name'] = [x.split(' ')[1] for x in df['Name']] 

d['Name'] = [' '.join(x.split(' ')[::2]) for x in d['Name']] 
1
name = "Doe, Mr. John" 

# if you always expect a title (Mr/Ms) between comma and dot 
# split to lastname, title and firstname and strip spaces 
newname = [ n.strip() for n in name.replace(".", ",").split(",") ] 

print(newname) 
#> ['Doe', 'Mr', 'John'] 

,那麼你可以打印標題和名字 - 姓氏列或他們的其他組合。

1

首先,您必須從名稱(逗號和點之間)獲得標題並將其存儲到另一列。然後重複這一操作,從塔「名稱」刪除標題:

import pandas as pd 

df = pd.DataFrame({'Name':['Doe, Mr. John', 'Anna, Ms. Fox'], 'Age':[23,33]}) 
df['New_Name'] = df['Name'].apply(lambda x: x[x.find(',')+len(','):x.rfind('.')]+'.') 
df['Name'] = df['Name'].apply(lambda x: x.replace(x[x.find(',')+len(','):x.rfind('.')]+'.','')) 
print df 

輸出:

Age  Name New_Name 
0 23 Doe, John  Mr. 
1 33 Anna, Fox  Ms. 
+0

編輯:沒關係,我不知道發生了什麼事情,但現在它的工作原理。再次感謝! – PhishFood

+0

只有當標題位於逗號和點之間時,我的代碼纔有效。它沒有逗號和/或點,它會返回'NaN'。逗號和點之間可以是任何類型的單詞:先生,小姐,主人,情婦等。代碼只是試圖找到逗號和點之間的單詞。 – Serenity

+0

它很棒!現在我只是想弄清楚代碼是如何工作的。我從來沒有使用lambda,len或rfind。我剛開始學習python,這個問題在我目前看到的任何事情上都有了突飛猛進的發展。我不確定這是否合適,但可以總結一下發生了什麼?我正在研究你使用的功能,但無法弄清楚它們是如何結合在一起的。如果不是這樣,謝謝你的幫助! – PhishFood

1

您可以使用熊貓str.replace和str.extract方法

首先提取標題,形成新列

df['New_Name'] = df['Name'].str.extract(',\s([A-Za-z]+.)') 

然後使用替換替換提取的字符串與空字符串摹

df['Name'] = df['Name'].str.replace('\s([A-Za-z]+.)\s', ' ') 

你得到:

Age Name  New_Name 
0 23 Doe, John Mr.