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"]])
相关推荐
傻啦嘿哟2 天前
Python实现Excel数据自动化处理:从繁琐操作到智能流程的蜕变
python·自动化·excel
jarreyer2 天前
python,numpy,pandas和matplotlib版本对应关系
python·numpy·pandas
hqyjzsb2 天前
从爱好到专业:AI初学者如何跨越CAIE认证的理想与现实鸿沟
大数据·c语言·人工智能·信息可视化·职场和发展·excel·业界资讯
写代码的【黑咖啡】2 天前
Python中的Pandas:数据分析的利器
python·数据分析·pandas
vfvfb3 天前
excel对比找不同人名 双xlsx双列对比
excel·excel多列对比
課代表3 天前
Excel VBA 为数据赋予随机浅色标记
excel·vba·可视化·条件格式·标记·对比·随机
kylezhao20193 天前
C#上位机开发数据持久化:excel报表导入导出
开发语言·c#·excel
悟能不能悟3 天前
springboot controller返回的是HttpServletResponse成功返回excel文件流,失败就返回失败参数
spring boot·后端·excel
野比带雄4 天前
対excel时间格式的理解
excel
缺点内向4 天前
Java:轻松实现 Excel 文档属性添加
java·开发语言·excel