2015-04-03 36 views
0

我有以下部分清潔的數據幀(下面的示例):清潔列數據,其中數據在重演(Python)的

Year Artist          Song 
2009 Black Eyed Peas        Boom Boom Pow 
1984 U2           Bad 
1998 Twain, ShaniaShania Twain      You Belong With Me 
2009 Gaga, LadyLady Gaga featuring Colby O'Donis Just Dance 
2008 Winehouse, AmyAmy Winehouse     Rehab 

在列「藝術家」,某些數據是乾淨的(例如,「U2 '和'黑眼豆豆'),但其中一些需要進一步清理 - 例如Shania Twain的名字重複兩次,Lady Gaga唱片的名字兩次,但Colby O'Donis被聲明一次。理想情況下,我想它是這樣的:

Year Artist          Song 
2009 Black Eyed Peas        Boom Boom Pow 
1984 U2           Bad 
1998 Shania Twain         You Belong With Me 
2009 Lady Gaga featuring Colby O'Donis    Just Dance 
2008 Amy Winehouse         Rehab 

我一直在嘗試使用拆分,更換等等 - 這些都幫助我得到這個階段 - 但發現它不可能因爲有進步在「藝術家」專欄中沒有一致性。

如果有人能請協助建議,我將不勝感激。 DF有大約120,000行,所以我需要能夠繼續在Python中清除它。

非常感謝提前。

回答

1

下面是我提出的一個解決方案,儘管這裏假定當藝術家姓名是「lastName,firstNamefirstName lastName」時總是會出現重複,否則AmyAmy Winehouse實際上可能是樂隊的名字,它可能是不正確更換

def removeDuplicateArtist(stringInput): 
    if "," in stringInput: 
     names = stringInput.split(" ") 
     artist = names[1][int(len(names[1])/2):] + " " 
     names.remove(names[0]) 
     names.remove(names[0]) 
     for i in names: 
      artist += str(i) + " " 
     return artist 
+0

更新它來處理「加加,加加LadyLady特色科爾比·奧多尼斯」 – 2015-04-03 04:22:30

+0

亞歷你好,感謝您抽出時間回覆。我試過你的代碼,並得到錯誤: 「UnboundLocalError :(在分配之前引用的局部變量'名稱','發生在索引0')」並且它指向行「for i in names」 。對此格式的抱歉,可以在我的問題上面張貼,如果這使得它更容易。 – gincard 2015-04-03 08:06:30

+1

我已經用多個字段嘗試過它,但仍未複製您的錯誤。這可能是由於我的答案中存在格式錯誤。我修復了縮進,所以再給它一個 – 2015-04-03 13:08:20