You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何用DataFrame的apply替换嵌套for循环

问题:用Pandas的apply替换嵌套循环实现子串匹配需求

初始代码与需求

给定以下DataFrame和列表:

import pandas as pd

my_df = pd.DataFrame({'fruits': ['apple', 'banana', 'cherry', 'durian'], 
                      'check': [False, False, False, False]})
my_list = ['pp', 'ana', 'ra', 'cj', 'up', 'down', 'pri']

需求:判断fruits列的每个元素是否包含my_list中的任意子串,若包含则将对应check列设为True,期望结果如下:

fruits  check
0   apple   True
1  banana   True
2  cherry  False
3  durian  False

报错情况

尝试用apply实现时写出如下代码:

my_df['fruits'].apply(lambda x: True for i in my_list if i in x)

触发错误:TypeError: 'generator' object is not callable


解决方法

方法1:修正apply的lambda写法

报错原因是直接将生成器表达式作为lambda的返回值,需要用any()来判断是否存在匹配的子串——any()会遍历生成器并返回布尔值,判断是否有任意子串匹配:

my_df['check'] = my_df['fruits'].apply(lambda x: any(sub in x for sub in my_list))

该代码对每个水果字符串x,检查my_list中是否存在任意子串sub包含在x内,匹配则返回True,否则返回False,直接赋值给check列即可。

方法2:更高效的矢量化操作(推荐)

Pandas的str.contains()支持正则表达式,可将my_list中的子串用|拼接成正则模式,实现矢量化匹配,效率远高于apply循环(尤其适用于大数据集):

pattern = '|'.join(my_list)
my_df['check'] = my_df['fruits'].str.contains(pattern)

这里'|'.join(my_list)生成正则模式'pp|ana|ra|cj|up|down|pri',str.contains()会检查每个水果字符串是否匹配该模式(即包含任意一个目标子串)。


内容的提问来源于stack exchange,提问作者GH KIM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 13:12:09