gpt4 book ai didi

python - 将 pandas 提取正则表达式与多个组一起使用

转载 作者:行者123 更新时间:2023-12-03 08:45:01 25 4
gpt4 key购买 nike

我正在尝试从 pandas 系列字符串中提取一个数字。例如考虑这个系列:

s = pd.Series(['a-b-1', 'a-b-2', 'c1-d-5', 'c1-d-9', 'e-10-f-1-3.xl', 'e-10-f-2-7.s'])

0 a-b-1
1 a-b-2
2 c1-d-5
3 c1-d-9
4 e-10-f-1-3.xl
5 e-10-f-2-7.s
dtype: object

共有 6 行和三种字符串格式/模板(已知)。目标是根据字符串为每行提取一个数字。这是我想到的:

s.str.extract('a-b-([0-9])|c1-d-([0-9])|e-10-f-[0-9]-([0-9])')

这可以正确地从每一行中提取我想要的数字:

    0   1   2
0 1 NaN NaN
1 2 NaN NaN
2 NaN 5 NaN
3 NaN 9 NaN
4 NaN NaN 3
5 NaN NaN 7

但是,由于我在正则表达式中有三个组,所以我有 3 列,问题来了:

我可以编写一个包含一组或可以生成单个列的正则表达式,还是需要将这些列合并为一个列,以及如果需要的话,如何在没有循环的情况下做到这一点?

期望的结果是这样的一系列:

0   1
1 2
2 5
3 9
4 3
5 7

最佳答案

最简单的事情是bfill\ffill:

(s.str.extract('a-b-([0-9])|c1-d-([0-9])|e-10-f-[0-9]-([0-9])')
.bfill(axis=1)
[0]
)

输出:

0    1
1 2
2 5
3 9
4 3
5 7
Name: 0, dtype: object

另一种方法是使用可选的非捕获组:

s.str.extract('(?:a-b-)?(?:c1-d-)?(?:e-10-f-[0-9]-)?([0-9])')

输出:

   0
0 1
1 2
2 5
3 9
4 3
5 7

关于python - 将 pandas 提取正则表达式与多个组一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61822799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com