gpt4 book ai didi

python - 将 re.search 函数应用于 Python 中的列

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:09 25 4
gpt4 key购买 nike

我有以下 Python 代码(我想要文本字段中特定数字的第一个匹配项):

import numpy as np
import pandas

data = {'A': [1, 2, 3], 'B': ['bla 4044 bla', 'bla 5022 bla', 'bla 6045 bla']}
df = pandas.DataFrame(data)

def fun_subjectnr(column):
column = str(column)
subjectnr = re.search(r"(\b[4][0-1][0-9][0-9]\b)",column)
subjectnr1 = re.search(r"(\b[2-3|6-8][0-9][0-9][0-5]\b)",column)
subjectnr = np.where(subjectnr == "" and subjectnr1 != "", subjectnr1,
subjectnr)
return subjectnr1

df['C'] = df['B'].apply(fun_subjectnr)

想要的输出:

 A    B                C
1 bla 4044 bla 4044
2 bla 5022 bla None
3 bla 6045 bla 6045

好像不行。当我将 [0] 添加到正则表达式代码时,它给出了一个错误...(subjectnr = re.search(r"(\b[4][0-1][0-9][0-9]\b)",列)[0])

谁知道该怎么做?提前致谢!

最佳答案

您可以使用 str.extract 执行此操作。您还可以稍微压缩您的模式,如下所示。

p = r'\b(4[0-1]\d{2}|(?:[2-3]|[6-8])\d{2}[0-5])\b'
df['C'] = df.B.str.extract(p, expand=False)

df

A B C
0 1 bla 4044 bla 4044
1 2 bla 5022 bla NaN
2 3 bla 6045 bla 6045

这应该比调用 apply 快得多。


详情

\b                 # word boundary
( # first capture group
4 # match digit 4
[0-1] # match 0 or 1
\d{2} # match any two digits
|
(?: # non-capture group (prevent ambiguity during matching)
[2-3] # 2 or 3
| # regex OR metacharacter
[6-8] # 6, 7, or 8
)
\d{2} # any two digits
[0-5] # any digit b/w 0 and 5
)
\b

关于python - 将 re.search 函数应用于 Python 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47923327/

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