我可以使用 series.str.extract 从 pandas 系列中提取子字符串。
ds = pd.Series(['1A apple', '1B pear', '3C orange', 'grape'])
ds.str.extract('(\\d.{1}).*', expand=False)
我最初尝试的是使用 apply 函数。
ds.apply(lambda x: re.search('(\\d.{1}).*', x).group(1))
我收到错误消息:
AttributeError: 'NoneType' object has no attribute 'group'
搜索模式似乎不适用于第四个元素'grape'
。所以它返回一个非类型。我的问题是如何修复上面的 apply 函数以使其工作?我很好奇如何使用 apply 函数来使用 str.extract 实现相同的任务。多谢。
您需要一个自定义函数来处理错误,就这么简单。你可以用try...except
块,或使用if
语句来测试返回的匹配对象的值re.search
.
def search(x):
try:
return re.search('(\\d.{1}).*', x).group(1)
except AttributeError:
return np.nan
ds.apply(search)
0 1A
1 1B
2 3C
3 NaN
dtype: object
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)