python - 通过 4 的项目数量错误,使用正则表达式提取时放置意味着 1

标签 python regex pandas dataframe

我的数据框中有一些列(约 200 万行),如下所示:

column
1/20/1"ADAF"
1/4/551BSSS
1/2/1AAAA
1/565/1 "AAA="

我只想提取:

1/20/1
1/4/551
1/2/1
1/565/1

我尝试过:

df['wanted_column'] = df['column'].str.extract(r'((\d+)/(\d+)/(\d+))', expand=True)

但是我得到了一个错误:

ValueError: Wrong number of items passed 4, placement implies 1

谁知道我哪里错了?如果有更好更快的解决方案,我将不胜感激。

提前致谢。

最佳答案

如果您想将字符串的单个部分提取到单个列中,请确保您的正则表达式仅包含单个捕获组。删除所有其他捕获组(如果它们是冗余的)或将它们转换为非捕获组(如果它们用作模式序列的简单分组,例如 (\W+\w+){0,3} -> (?:\W+\w+){0,3} )。

在这里,您可以使用

df['wanted_column'] = df['column'].str.extract(r'(\d+/\d+/\d+)', expand=True)

重点是,当您将其与 str.extract 一起使用时,仅在正则表达式中使用单个捕获组将值提取到单个列中。

请注意r'((\d+)/(\d+)/(\d+))'也可以重写为 r'((?:\d+)/(?:\d+)/(?:\d+))'对于此用例,但这些非捕获组将是多余的,因为它们仅对单个 \d+ 进行分组他们每个人都有模式,这没有意义。

如果您需要将值提取到多列中,请注意列数应等于模式中捕获组的数量,例如

df[['Val1', 'Val2', 'Val3']] = df['column'].str.extract(r'(\d+)/(\d+)/(\d+)', expand=True)
#       1       2       3                                 ^ 1 ^ ^ 2 ^ ^ 3 ^

关于python - 通过 4 的项目数量错误,使用正则表达式提取时放置意味着 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52802425/

相关文章:

java - 为什么方括号内的点不匹配任何字符?

python - 当我在 PyQt4 中打开新窗口时如何关闭旧窗口

python - 启用模块的记录器

regex - 使用多个选项检查长度的正则表达式

iphone - 如何在 iPhone 应用程序中使用正则表达式以 , (逗号)分隔字符串

python - 如何使用 python 从 2 个非数字列创建堆积条形图?

python - 如何将单个项目添加到 Pandas 系列

python - 从离散化数值的 pandas get_dummies 创建开放边界指标

python - 操作系统(任何操作系统或至少是 Linux)会自动在内核之间分配启动的线程吗?

python - 用 Python 编写易于阅读的 XML