2016-11-22 24 views
0

你好列刪除串起的數據,如果我有這樣的一個數據幀中的列:分離,並從在Python

df["OriginCityName"]: 
         OriginCityName: 
    0     Dallas/Fort Worth, TX 
    1     Detroit, MI 

我只希望提取的詞「達拉斯」和「底特律」,丟棄剩餘的數據。我希望列後看起來像這樣:

df["OriginCityName"]: 
         OriginCityName: 
     0     Dallas 
     1     Detroit 

有沒有辦法做到這一點。謝謝

回答

2

您可以使用extract方法與正則表達式(^[A-Za-z]+)。這種提取所有字母字符從字符串的開頭:

df.OriginalCityName.str.extract('(^[A-Za-z]+)') 

#0 
#0  Dallas 
#1 Detroit 
#Name: OriginalCityName, dtype: object 

或者,如果您確定要提取什麼來無論是/,之前,你可以試試這個:df.OriginalCityName.str.extract('(^.*?)(?=[/,])')。這提取了第一個/,之前的所有內容,這是由於懶惰匹配.*?

+1

對正則表達式什麼好讀你可以建議? –

+0

祝你好運與紐約,但這是另一個故事比OP的一個:) – Boud

+1

@StevenG關於正則表達式在線有很多的資源。我認爲這個來自另一個堆棧溢出用戶的博客是一個好的開始。總共有四部分教程。 https://rock321987.wordpress.com/2016/06/19/regex-tutorial-part-1/ – Psidom

2

由於您希望「清理」城市名稱的規則可能隨着您看到更多數據而發生變化,因此我會構建清理功能。在這種情況下,re.split應該做的伎倆,並且可擴展的一段時間:

import re 

name_clean = lambda name: re.split(r'[/,]', name)[0] 
df.OriginCityName = df.OriginCityName.apply(name_clean) 

使用re.split有好生之德妥善處理在其名稱中的空格或標點符號,如"New York""St. Petersburg"城市。

+0

我覺得這個效果更好謝謝@Johnathan Eunice –