如何根据列中文本内容筛选DataFrame?求高效通用代码
高效筛选包含指定文本的DataFrame行
针对你处理大数据集的需求,这里推荐使用pandas内置的矢量化字符串匹配方案,它底层基于C实现,比手动循环效率高几个数量级,同时代码简洁通用。
完整实现代码
import pandas as pd # 初始化原始DataFrame saf_data = {'col1': ['U1', 'U2', 'U3', 'U4'], 'col2': ['1', '2|6', '4a|6a', '6b']} saf_df = pd.DataFrame(saf_data) # 核心筛选逻辑:保留col2中包含"6"的行 filtered_df = saf_df[saf_df['col2'].str.contains('6', na=False)] # 如果只需要提取col1的列表结果 col1_result_list = filtered_df['col1'].tolist() # 输出验证 print("筛选后的DataFrame:") print(filtered_df) print("\ncol1对应的列表:") print(col1_result_list)
代码说明
- 高效性:
str.contains是pandas矢量化操作,直接对整列数据批量处理,避免了Python层面的循环遍历,在大数据集上性能优势极其明显。 - 通用性:
na=False参数:处理数据中可能存在的缺失值(NaN),避免因缺失值导致筛选结果出现异常;- 如果需要大小写不敏感的匹配,可以添加
case=False参数; - 如果需要更精准的正则匹配(比如仅匹配独立的"6"而非包含"6"的子串),可以传入正则表达式,例如
str.contains(r'\b6\b', na=False)。
预期输出
筛选后的DataFrame:
col1 col2 1 U2 2|6 2 U3 4a|6a 3 U4 6b
col1对应的列表:['U2', 'U3', 'U4']
内容的提问来源于stack exchange,提问作者msh855
相关产品推荐
相关产品推荐

