使用pandas读取Excel文件并按三类分类,无法实现目标输出逻辑
解决Excel技能分类与pandas读取问题
一、先搞定pandas读取Excel的问题
首先确保安装必要依赖:
pip install pandas openpyxl xlrd
基础读取代码:
import pandas as pd # 读取Excel,指定sheet名(多sheet时用索引sheet_name=0也可以) df = pd.read_excel("你的文件路径.xlsx", sheet_name="Sheet1") # 先确认读取是否正确 print(df.head()) print("数据列名:", df.columns.tolist())
如果读取失败,排查这几点:
- 用绝对路径替代相对路径,避免路径识别错误
- 确保Excel文件没被其他程序占用
- 旧版xls格式需安装xlrd==1.2.0(新版xlrd不再支持xls)
- 核对sheet名称是否准确,或者直接用索引定位
二、实现技能分类逻辑
方法1:精准匹配(适合已知完整技能列表)
先定义三类技能的映射字典,替换成你的实际技能:
skill_categories = { "technical": ["Python", "SQL", "Java", "机器学习", "数据建模"], "functional": ["需求分析", "项目管理", "流程优化", "客户对接"], "soft": ["沟通能力", "团队协作", "问题解决", "领导力"] } def categorize_skill(skill): for category, skills in skill_categories.items(): if skill in skills: return category return "未分类" # 处理不在列表里的技能 # 把分类结果新增到DataFrame中 df["category"] = df["技能列名称"].apply(categorize_skill)
方法2:模糊匹配(处理技能名称有变体的情况)
比如"Python开发"和"Python编程"这类近似技能,用模糊匹配:
from fuzzywuzzy import fuzz def categorize_skill_fuzzy(skill): threshold = 80 # 匹配阈值,数值越高匹配越严格 for category, skills in skill_categories.items(): for s in skills: if fuzz.partial_ratio(skill.lower(), s.lower()) >= threshold: return category return "未分类" # 先安装依赖 # pip install fuzzywuzzy python-Levenshtein df["category"] = df["技能列名称"].apply(categorize_skill_fuzzy)
方法3:正则匹配(按关键词分类)
针对有规律的技能名称,用关键词正则匹配:
import re def categorize_skill_regex(skill): skill_lower = skill.lower() if re.search(r"python|sql|java|机器学习|开发|编程|数据库", skill_lower): return "technical" elif re.search(r"需求|项目管理|流程|业务", skill_lower): return "functional" elif re.search(r"沟通|协作|领导力|团队", skill_lower): return "soft" else: return "未分类" df["category"] = df["技能列名称"].apply(categorize_skill_regex)
三、验证输出
分类完成后,查看结果:
# 查看前几行分类结果 print(df[["技能列名称", "category"]].head()) # 统计各类别数量 print(df["category"].value_counts())
内容的提问来源于stack exchange,提问作者Kompal
相关产品推荐
相关产品推荐

