2017-02-13 66 views
1

比方說,我有以下數據框系列DF [「名稱」柱:使用str.split

  Name 
     'Jerry' 
    'Adam (and family)' 
'Paul and Hellen (and family):\n' 
'John and Peter (and family):/n' 

我如何會刪除所有內容名稱後先括號?

df['Name']= df['Name'].str.split("'(").str[0] 

似乎不工作,我不明白爲什麼?

我想輸出是

  Name 
     'Jerry' 
     'Adam' 
    'Paul and Hellen' 
    'John and Peter' 

所以一切都在括號之後被刪除。

回答

2

解決方案與split - 是必要的逃生(通過\

df['Name']= df['Name'].str.split("\s+\(").str[0] 
print (df) 
       Name 
0   'Jerry' 
1    'Adam 
2 'Paul and Hellen 
3 'John and Peter 

解決方案與regexreplace

df['Name']= df['Name'].str.replace("\s+\(.*$", "") 
print (df) 
       Name 
0   'Jerry' 
1    'Adam 
2 'Paul and Hellen 
3 'John and Peter 

\s+\(.*$表示從可選whitespace,第一個(到字符串$""的末尾替換 - 空字符串。

+0

那麼「(\()。* $」實際上是什麼意思? – Joey

+0

我不是正則表達式專家,所以我嘗試解釋它是如何理解它的。 – jezrael

0

使用正則表達式:

>>> import re 
>>> str = 'Adam (and family)' 
>>> result = re.sub(r"(\().*$", '', str) 
>>> print result 
Adam 
+0

這適用於str而不是數據框對象... TypeError:期望的字符串或類似字節的對象 – Joey

+1

使用'str.replace',它允許使用正則表達式:'替換Series/Index中pattern/regex的出現與其他一些字符串。相當於str.replace()或re.sub()。'請參閱:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.replace.html#pandas.Series。 str.replace –

相關問題