Pandas如何高效过滤DataFrame中包含特定字符串的数据行?

在数据处理与分析中,Pandas 是 Python 中最核心的库之一,其 DataFrame 结构提供了高效的数据操作能力,过滤包含特定字符串的数据是常见需求,无论是清洗文本数据、提取关键信息还是筛选特定条件的记录,掌握多种过滤方法都能显著提升工作效率,以下将详细介绍几种常用方法,涵盖基础到进阶的应用场景,并辅以示例说明其操作逻辑与适用场景。

Pandas过滤dataframe中包含特定字符串的数据方法

使用 str.contains() 方法进行模糊匹配

str.contains() 是 Pandas 中专门用于检测字符串是否包含特定子串的方法,返回布尔 Series,可直接用于索引过滤,该方法支持正则表达式,灵活性高,适合需要模糊匹配的场景,假设有一个包含产品名称的 DataFrame df,需筛选名称中包含“手机”的记录,可使用:

filtered_df = df[df['产品名称'].str.contains('手机', na=False)]  

na=False 参数用于处理缺失值,避免因 NaN 导致报错,若需匹配多个关键词(如“手机”或“平板”),可通过正则表达式实现:

filtered_df = df[df['产品名称'].str.contains('手机|平板', na=False)]  

该方法对大小写敏感,若需忽略大小写,可添加 case=False 参数:

filtered_df = df[df['产品名称'].str.contains('手机', case=False, na=False)]  

使用 str.match() 方法进行正则表达式匹配

str.match()str.contains() 类似,但仅匹配字符串开头符合正则表达式的模式,筛选以“华为”开头的产品名称:

filtered_df = df[df['产品名称'].str.match('^华为', na=False)]  

该方法适用于需要严格限定字符串起始位置的场景,如校验特定前缀的编号或名称。

Pandas过滤dataframe中包含特定字符串的数据方法

使用 isin() 方法精确匹配关键词列表

若需过滤包含多个特定关键词之一的数据(且关键词可能出现在字符串任意位置),可结合 str.split()isin() 实现,筛选“产品名称”列中包含“手机”“电脑”“平板”之一的记录:

keywords = ['手机', '电脑', '平板']
filtered_df = df[df['产品名称'].str.split().apply(lambda x: any(kw in x for kw in keywords))]  

此方法先将字符串拆分为单词列表,再检查是否存在关键词,适合关键词为独立单词的情况,若需直接匹配子串(而非独立单词),可改用:

filtered_df = df[df['产品名称'].apply(lambda x: any(kw in x for kw in keywords))]  

使用 query() 方法简化条件表达式

query() 方法允许通过类 SQL 语法编写过滤条件,代码更简洁,筛选“产品名称”包含“手机”且“销量”大于 100 的记录:

filtered_df = df.query("产品名称.str.contains('手机') and 销量 > 100", engine='python')  

需注意 engine='python' 参数以支持字符串方法调用,该方法适合复杂条件的组合查询。

处理多列过滤与缺失值

若需同时检查多列是否包含特定字符串,可使用 DataFrame.any() 方法,筛选“产品名称”或“描述”列包含“促销”的记录:

Pandas过滤dataframe中包含特定字符串的数据方法

filtered_df = df[df[['产品名称', '描述']].apply(lambda x: x.str.contains('促销', na=False)).any(axis=1)]  

any(axis=1) 表示只要任意一列满足条件即保留,对于缺失值,除 na=False 外,还可提前用 fillna() 填充默认值,如:

df['产品名称'] = df['产品名称'].fillna('未知')  
filtered_df = df[df['产品名称'].str.contains('手机', na=False)]  

方法对比与选择建议

为更直观地选择合适方法,以下是常见场景的对比:

方法 适用场景 是否支持正则 是否支持多列 示例
str.contains() 模糊匹配子串(任意位置) 否(需结合any df[df['列'].str.contains('关键词')]
str.match() 匹配字符串开头 df[df['列'].str.match('^前缀')]
isin()+apply 匹配多个关键词之一 df[df['列'].apply(lambda x: any(kw in x for kw in keywords))]
query() 复杂条件组合 df.query("列.str.contains('关键词') and 其他列 > 值")

相关问答FAQs

Q1:如何过滤不包含特定字符串的数据?
A:可通过在 str.contains() 前添加 取反实现,筛选“产品名称”不包含“手机”的记录:

filtered_df = df[~df['产品名称'].str.contains('手机', na=False)]  

Q2:如何高效过滤大数据集中包含特定字符串的数据?
A:对于大数据集,建议优先使用 str.contains()na=False 参数,并避免在循环中逐行操作,可通过 dtype 优化(如将字符串列转为 category 类型)提升性能,示例:

df['产品名称'] = df['产品名称'].astype('category')  
filtered_df = df[df['产品名称'].str.contains('手机', na=False)]  

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/310541.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年12月25日 07:08
下一篇 2025年12月25日 07:13

相关推荐

  • asp虚拟主机设置404不生效

    P虚拟主机设置404不生效,可能原因有:配置文件代码有误、服务器权限不足、缓存未更新。

    2025年7月28日
    800
  • phpapache负载均衡如何实现高并发与高可用?

    PHP与Apache负载均衡是企业级Web应用中提升性能、增强可靠性的重要技术组合,PHP作为流行的服务器端脚本语言,常用于动态网页开发,而Apache作为成熟的Web服务器,通过负载均衡技术能够有效分散请求压力,优化资源利用,负载均衡的核心目标是将用户请求合理分配到多个后端服务器,避免单点故障,提高整体系统的……

    2025年12月19日
    1200
  • 服务器是电信的吗?揭秘网络连接背后的真相

    在当今数字化时代,服务器作为承载网站、应用程序和数据的核心设施,其性能和稳定性直接影响到用户的体验,当您在选择服务器时,如何判断服务器是否是电信的呢?本文将为您详细解析如何识别电信服务器,并结合酷盾(kd.cn)的云产品,为您提供独家的经验案例,电信服务器的识别方法查看IP地址电信服务器的IP地址通常以“211……

    2026年2月15日
    1000
  • 防火墙虚拟主机配置中频繁出现命令错误,如何有效排查解决?

    防火墙虚拟主机命令错误处理及排查随着互联网的普及,防火墙和虚拟主机已成为企业保障网络安全的重要手段,但在实际操作过程中,用户可能会遇到防火墙虚拟主机命令错误的问题,本文将针对此类问题进行详细解析,并提供相应的解决方法,防火墙虚拟主机命令错误类型配置错误在配置防火墙和虚拟主机时,可能会出现以下错误:(1)端口配置……

    2025年10月14日
    1800
  • 云虚拟主机建立数据库,有哪些最佳实践和注意事项?

    云虚拟主机建立数据库是一个相对简单的过程,但需要遵循一定的步骤和注意事项,以下是一个详细的指南,帮助您在云虚拟主机上建立数据库,选择云虚拟主机提供商您需要选择一个可靠的云虚拟主机提供商,以下是一些知名的服务商:服务商优点缺点AWS全球覆盖,功能强大,稳定性高价格较高Azure与Microsoft产品集成良好,安……

    2025年10月14日
    900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN