【发布时间】:2018-06-04 00:49:36
【问题描述】:
我有以下 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)",column)[0])
谁知道该怎么做?提前致谢!
【问题讨论】:
-
你能解释一下你是如何得到这个输出的吗?你应该使用
Series.str.findall。 -
我已经尝试过 findall 并且它有效,但我不想要所有匹配项,只有第一个匹配项......
-
好的,然后
Series.str.extract。我的问题是,你到底想做什么?为什么第二个结果是 None? -
我想要第一个匹配项(特定格式的数字),所以第二个不是正确的格式数字(bc 第一个数字是 5)。我会尝试做 series.str.extract,谢谢!
-
如果答案有什么不足,请告诉我。如果没有,请考虑将其标记为接受。非常感谢。