python - 使用带有正则表达式的 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 函数一起使用?我不明白为什么我会得到一个充满空列表的系列作为后者的输出。
解决方案
您需要将部分函数传递给应用,或者简单地使用 lambda
Df['weight'].apply(lambda x:re.findall('^([0-9]+)\s+',x))
推荐阅读
- python - 如何通过正则表达式过滤 numpy 数组?
- eclipse - 在 Windows 10 中的 Eclipse Oxygen 上创建 MPI 项目
- python - html 到文本:将制表符后的所有内容移至新行
- r - 根据其他 3 列的结果在 R 数据框中创建新列
- facebook - facebook 聊天进入网站时出现内容安全策略错误?
- oracle - PL/SQL - 特定于一个数据库的条件编译
- neo4j - 带有 lambda 表达式和消费者断言的 TestMethods 的 JQassistant 规则
- node.js - 创建的模型返回空数组
- python - Python 命令行循环
- c# - 在不迁移用户的情况下使用 Azure Active Directory B2C