Python 基于括号位置对数据帧值使用str.split

Python 基于括号位置对数据帧值使用str.split,python,pandas,split,Python,Pandas,Split,假设我有以下dataframe series df['Name']列: 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] 似乎不起作用,我不明白为什么 我想要的输出是

假设我有以下dataframe series df['Name']列:

         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'

因此,括号后的所有内容都将被删除。

使用正则表达式:

>>> import re
>>> str = 'Adam (and family)'
>>> result = re.sub(r"( \().*$", '', str)
>>> print result
Adam
带-的解决方案是必要的转义
通过
\

df['Name']= df['Name'].str.split("\s+\(").str[0]
print (df)
               Name
0           'Jerry'
1             'Adam
2  'Paul and Hellen
3   'John and Peter
带有
regex的解决方案
和:


\s+\(.*$
表示从可选的
空白
,第一个
到字符串的结尾到
-空字符串。

这适用于str而不是dataframe对象…TypeError:预期的字符串或字节,如objectUse
str.replace
,它允许使用正则表达式:
用其他字符串替换序列/索引中出现的模式/正则表达式。等效于str.replace()或re.sub().
请参阅更多信息:“(().*$”实际上是什么意思?我不是正则表达式专家,所以我尝试解释我是如何理解它的。
df['Name']= df['Name'].str.replace("\s+\(.*$", "")
print (df)
               Name
0           'Jerry'
1             'Adam
2  'Paul and Hellen
3   'John and Peter