如何高效过滤DataFrame中字段值被包含在指定字符串的行?
高效筛选DataFrame中X列值为'foo'子串的行
给你两个高效的解决方案,比手动循环快得多:
方法一:使用apply(通用且简洁)
直接对X列应用lambda判断每个值是否是'foo'的子串,处理缺失值的版本:
import pandas as pd df2 = df[df['X'].apply(lambda x: x in 'foo' if pd.notna(x) else False)]
如果X列没有缺失值,可简化为:
df2 = df[df['X'].apply(lambda x: x in 'foo')]
apply是批量列操作,底层经过优化,比逐行遍历的iterrows()快很多。
方法二:预生成子串集合+str.isin()(大数据量下更高效)
如果你的DataFrame行数极多,或者目标字符串(比如'foo')较长,先把目标字符串的所有非空子串存入集合,再用str.isin()查询(集合查询是O(1)复杂度,速度更快):
import itertools target_str = 'foo' # 生成所有非空子串 substring_set = set() for l in range(1, len(target_str)+1): for i in range(len(target_str) - l + 1): substring_set.add(target_str[i:i+l]) # 筛选符合条件的行 df2 = df[df['X'].str.isin(substring_set, na=False)]
内容的提问来源于stack exchange,提问作者frankly
相关产品推荐
相关产品推荐

