Python - 正则表达式将数据框中的一列拆分为 2 [重复]
Posted
技术标签:
【中文标题】Python - 正则表达式将数据框中的一列拆分为 2 [重复]【英文标题】:Python - regex to split a column in 2 in a dataframe [duplicate] 【发布时间】:2021-01-19 13:03:37 【问题描述】:我在数据框中有一列,其中包含诸如“Boris”之类的字符串,以及其他在括号之间带有额外文本的列,例如“Igor (king)”。 我只想得到一个包含 Boris / Igor / ... 的专栏(括号之间的所有内容都已删除)。 我试过这个
pattern = '(^[\w]*)(?:[w]* \()'
Test =df['column'].str.extract(pattern)
我只返回了带有括号的额外文本的名称:我得到 NaN / Igor /Nan
一些帮助?
【问题讨论】:
请使用 DataFrame 中的一些示例行更新问题,以便我们调试正则表达式。 将 re.sub 与\([^()]+\)
一起使用或使用 (^\w+) \([^()]+\)
并替换为组 1 regex101.com/r/7cZq00/1
【参考方案1】:
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
【讨论】:
谢谢穆吉加。我仍然对像“杰克(波斯王子)”这样的蜇伤感到不满:什么都没有被替换。我还有“杰克(波斯王子)” 可能会替换其间的所有内容,包括()
。更新了答案【参考方案2】:
如果要保留第一个单词并删除括号之间的以下内容,则必须扩展模式以匹配到右括号。
您可以使用 str.replace
并在替换中使用捕获组 1。
^(\w+) \([^()]+\)
说明
^
字符串开始
(\w+)
捕获组 1,匹配 1+ 个单词字符后跟一个空格,或者使用 \s+
代替匹配 1+ 个空格字符
\([^()]+\)
从(
到)
使用negated character class 匹配除(
或)
之外的任何字符
Regex demo
例如
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
【讨论】:
以上是关于Python - 正则表达式将数据框中的一列拆分为 2 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
将一个系列中的数字添加到同一数据框中的一系列字母,可能使用正则表达式