首页 > 解决方案 > 使用带有正则表达式的 Pandas.Series.Apply 函数时出现问题

问题描述

我正在尝试在数据框中的特定列上应用正则表达式。

此列称为数据类型“非空对象”的“权重”。此列中的示例值如下所示——“250 磅/113.4 千克”。

我的目标是在整个列上应用正则表达式,以便仅提取以磅为单位的重量(在上面的示例中,这将是“250”)。

为此,我使用 Series.Apply 函数对列的每一行应用正则表达式:

import re

k = Df['weight'].apply(re.findall,args=('^([0-9]+)\s+',))

print(k.head())

但由于某种原因,“k”原来是一个包含空列表的 Pandas 系列。

我尝试对re.findall“权重”列中的各个元素一一应用,并按预期返回输出:

k = re.findall('^([0-9]+)\s+',Df['weight'].iloc[0])
print(k)

如果我们对上述示例值进行尝试,这将返回 ['250'] 的输出。

为什么re.findall单独应用于 Series 的元素时可以正常工作,但不能与 Series.Apply 函数一起使用?我不明白为什么我会得到一个充满空列表的系列作为后者的输出。

标签: pythondataframere

解决方案


您需要将部分函数传递给应用,或者简单地使用 lambda

Df['weight'].apply(lambda x:re.findall('^([0-9]+)\s+',x))

推荐阅读