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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将一个系列中的数字添加到同一数据框中的一系列字母,可能使用正则表达式

对数据框中的一列求和并将结果返回为 int

将数据框中的结构类型列拆分为多列

将列表的列拆分为同一 PySpark 数据框中的多列

如何在 python 的另一列中的字符串值中从数据框中的一列中搜索字符串?

Pandas 正则表达式拆分字符和组