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

如何在Pandas DataFrame中使用str.contains获取匹配子串值

如何使用str.contains在DataFrame中提取所有匹配目标的元素并整理为单个Series

要实现未知目标列的情况下,用正则匹配(忽略大小写)提取所有匹配值并转为单个Series,可以按以下方式处理:

问题分析

原代码使用df.where(mask)会保留DataFrame的原有结构,仅在匹配位置保留值,其余填充NaN,无法直接得到所有匹配值的一维Series。我们需要遍历所有列,筛选出每个列中符合条件的元素,再合并成目标格式。

解决方案代码

方法一:遍历列筛选匹配项

import pandas as pd
import re

df = pd.DataFrame({"Name": ['Philip', 'Jana', 'Kate', 'John K.', 'Jonhatan'],
                   "City": ['NewYork', 'New jearsey', 'Mexico City', 'Lisbon', 'Bahia'],
                   "Language": ['English', 'english', 'Spanish, Dutch, German', 'Spanish and English', 'Portuguese, English'],
                    "Years": [24, 27, 29, 40, 61] })

search = 'english'
matches = []

# 遍历所有列,提取匹配元素
for col in df.columns:
    # 将列转为字符串类型,避免数值列报错,同时做不区分大小写的正则匹配
    matched_vals = df[col].astype(str)[df[col].astype(str).str.contains(search, flags=re.I)]
    matches.extend(matched_vals.tolist())

# 转换为目标格式的Series
result_series = pd.Series(matches)
print(result_series)

方法二:列表推导式简化写法

import pandas as pd
import re

df = pd.DataFrame({"Name": ['Philip', 'Jana', 'Kate', 'John K.', 'Jonhatan'],
                   "City": ['NewYork', 'New jearsey', 'Mexico City', 'Lisbon', 'Bahia'],
                   "Language": ['English', 'english', 'Spanish, Dutch, German', 'Spanish and English', 'Portuguese, English'],
                    "Years": [24, 27, 29, 40, 61] })

search = 'english'
# 嵌套推导式遍历所有列和元素,筛选匹配项
matches = [val for col in df.columns for val in df[col].astype(str) if re.search(search, val, flags=re.I)]
result_series = pd.Series(matches)
print(result_series)

代码说明

  • 两种方法都会遍历DataFrame的所有列,将列元素转为字符串类型(兼容数值列),通过str.contains或re.search实现不区分大小写的正则匹配(flags=re.I)。
  • 收集所有匹配的元素后,转为pd.Series即可得到期望的结果:
    0                  English
    1                  english
    2    Spanish and English
    3     Portuguese, English
    dtype: object
    

内容的提问来源于stack exchange,提问作者matt.aurelio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:20:16