我在数据帧中有一个列,其中的字符串是这样的"Boris“,其他的在括号之间有额外的文本,比如"Igor (king)”。我只想和Boris / Igor / ..。(删除括号之间的所有内容)。我试过了
pattern = '(^[\w]*)(?:[w]* \()'
Test =df['column'].str.extract(pattern)
我只返回带有括号的名字:I get NaN / Igor /Nan
帮帮忙?
发布于 2020-10-04 22:07:27
df = pd.DataFrame({'name': ['Boris', 'Igor (King)', "Jack (prince of Persia)"]})
df['name'] = df['name'].apply(lambda x: re.sub(r"\(.*\)", "", x).strip())
输出:
name
0 Boris
1 Igor
2 Jack
发布于 2020-10-04 23:17:21
如果您想保留第一个单词,并删除括号之间的以下内容,则必须扩展您的模式以匹配到结束括号。
您可以使用str.replace
并在替换中使用捕获组1。
^(\w+) \([^()]+\)
说明
^
string(\w+)
^
Group1的开始,匹配后跟空格的单词字符,或者使用\s+
匹配1+空白字符,并使用与除(
或)
之外的任何字符匹配的negated character class从(
匹配到)
例如
df = pd.DataFrame({'column': ['Boris', 'Igor (King)', 'Jack (prince of Persia)']})
df =df['column'].str.replace(r"^(\w+) \([^()]+\)", r"\1")
print(df)
输出
0 Boris
1 Igor
2 Jack
https://stackoverflow.com/questions/64195492
复制相似问题