excel+pandas使用str.contains() 的典型例子

一、基础用法(精确 / 模糊匹配)

1. 模糊匹配包含指定字符

python 复制代码
import pandas as pd

# 模拟硅钢材质编号数据
df = pd.DataFrame({
    "material_code": ["35WW300", "50W470", "20JN200", "35WW250", "65W800"],
    "defect_type": ["表面划痕", "边缘毛刺", "氧化斑点", "划痕+变形", "无缺陷"]
})

# 匹配包含 "WW" 的材质编号(硅钢无取向牌号常见标识)
df["has_WW"] = df["material_code"].str.contains("WW")
print("包含'WW'的材质:")
print(df[df["has_WW"]][["material_code"]])

2. 忽略大小写匹配

python 复制代码
# 模拟带大小写的缺陷记录
df["defect_note"] = ["Scratch", "scratch", "SCRATCH", "Oxidation", "Burr"]

# 忽略大小写匹配 "scratch"(缺陷类型统一识别)
df["is_scratch"] = df["defect_note"].str.contains("scratch", case=False)
print("\n忽略大小写匹配'scratch':")
print(df[df["is_scratch"]][["defect_note"]])

二、正则表达式匹配(复杂场景)

1. 匹配多个关键词(缺陷类型多选一)

python 复制代码
# 匹配 "划痕" 或 "毛刺" 或 "氧化" 任一缺陷
df["has_common_defect"] = df["defect_type"].str.contains("划痕|毛刺|氧化")
print("\n含常见缺陷的记录:")
print(df[df["has_common_defect"]][["defect_type"]])

2. 匹配特定格式(材质编号正则校验)

python 复制代码
# 匹配硅钢牌号格式:2位数字 + 字母 + 3位数字(如 35WW300 简化匹配)
df["valid_code"] = df["material_code"].str.contains(r"^\d{2}[A-Za-z]{2}\d{3}$")
print("\n符合牌号格式的材质:")
print(df[df["valid_code"]][["material_code"]])

3. 匹配开头 / 结尾字符

python 复制代码
# 匹配以 "35" 开头的材质编号(特定厚度规格)
df["start_with_35"] = df["material_code"].str.contains(r"^35")

# 匹配以 "00" 结尾的材质编号(特定铁损等级)
df["end_with_00"] = df["material_code"].str.contains(r"00$")
print("\n以'35'开头且以'00'结尾的材质:")
print(df[df["start_with_35"] & df["end_with_00"]][["material_code"]])

三、处理缺失值与特殊情况

1. 缺失值处理(避免报错)

python 复制代码
# 模拟含缺失值的数据
df_with_na = pd.DataFrame({
    "material_code": ["35WW300", None, "50W470", pd.NA, "20JN200"]
})

# na=False:缺失值视为不匹配;na=True:缺失值视为匹配
df_with_na["has_WW"] = df_with_na["material_code"].str.contains("WW", na=False)
print("\n处理缺失值的匹配结果:")
print(df_with_na[["material_code", "has_WW"]])

四、实用技巧(硅钢工作场景延伸)

1. 匹配包含数字的缺陷描述

python 复制代码
# 模拟带尺寸的缺陷记录
df["defect_detail"] = ["划痕长度5mm", "毛刺高度2mm", "无具体尺寸", "氧化面积3cm²"]

# 匹配包含数字的缺陷详情(提取量化缺陷)
df["has_quantity"] = df["defect_detail"].str.contains(r"\d+")
print("\n含量化数据的缺陷详情:")
print(df[df["has_quantity"]][["defect_detail"]])

2. 排除特定关键词

python 复制代码
# 匹配包含 "WW" 但不含 "300" 的材质编号(筛选特定牌号范围)
df["target_material"] = df["material_code"].str.contains(r"WW(?!300)")
print("\n含'WW'且不含'300'的材质:")
print(df[df["target_material"]][["material_code"]])
相关推荐
偷心伊普西隆22 分钟前
Python EXCEL 半自动化切分数据集
python·自动化·excel
weixin_4624462317 小时前
Python 解析 Excel 图表(Chart)信息实战:从 xlsx 中提取标题、字体和数据
python·数据分析·excel·报表自动化
薛定谔的猫喵喵18 小时前
解决 xlrd 2.0+ 版本只支持 xls 格式的问题
python·excel
椎49521 小时前
苍穹外卖资源点整理+个人错误解析-Day12-数据统计-EXCEL报表
excel
喜欢吃豆21 小时前
从「文件URL」到「模型可理解内容」:一套完整的文件上传与解析处理流程详解(含PDF/Excel/图片)
pdf·大模型·excel
帆张芳显1 天前
智表zcell产品V3.5 版发布,新增行列选中操作等功能
前端·javascript·excel·插件·canva可画
夜喵YM1 天前
基于 Spire.XLS.Free for Java 实现无水印 Excel 转 PDF
java·pdf·excel
TheNextByte11 天前
如何将Android联系人导出为 Excel 格式
android·excel
☀Mark_LY1 天前
java读取excel文件返回JSON
java·json·excel
Ahtacca1 天前
拒绝重复造轮子:利用自定义注解封装POI,实现Java通用Excel解析
java·javascript·vue·excel