使用 pandas 时的异常处理 apply

zes*_*sla 2 python exception-handling apply dataframe pandas

我可以使用 series.str.extract 从熊猫系列中提取子字符串。

ds = pd.Series(['1A apple', '1B pear', '3C orange', 'grape'])
ds.str.extract('(\\d.{1}).*', expand=False)
Run Code Online (Sandbox Code Playgroud)

我最初尝试的是使用 apply 函数。

ds.apply(lambda x: re.search('(\\d.{1}).*', x).group(1))
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

AttributeError: 'NoneType' object has no attribute 'group'
Run Code Online (Sandbox Code Playgroud)

似乎搜索模式不适用于第四个元素'grape'。所以它返回一个nonetype。我的问题是如何修复上面的应用函数以使其工作?我很好奇如何使用 apply 函数使用 str.extract 来实现相同的任务。非常感谢。

cs9*_*s95 5

您需要一个自定义函数来处理错误,就这么简单。您可以使用try...except块执行此操作,或使用if语句来测试由 返回的匹配对象的值re.search

def search(x):
    try:
        return re.search('(\\d.{1}).*', x).group(1)
    except AttributeError:
        return np.nan
Run Code Online (Sandbox Code Playgroud)

ds.apply(search)

0     1A
1     1B
2     3C
3    NaN
dtype: object
Run Code Online (Sandbox Code Playgroud)