基于相似字符串匹配获取Dataframe单元格值出现IndexError如何解决
错误原因
你使用的是完全相等匹配规则,而DataFrame中曼城对应的队名字段是Manchester C.,和你输入的Manchester City内容不一致,导致筛选结果为空DataFrame,此时调用iloc[0]访问不存在的第一行数据,就会触发越界报错。
解决方案
方案1:简单子串匹配(无需额外依赖)
如果目标字符串和数据集内的字段存在公共子串,可以用str.contains()做模糊包含匹配:
hometeam = 'Manchester City' # 提取公共子串做匹配,或者直接用目标字符串的前缀匹配 filtered = df[df['Teams'].str.contains('Manchester C')] if not filtered.empty: pts_man_city = filtered.iloc[0]['Pts'] else: print("未找到对应球队")
方案2:相似度匹配(适配更复杂的拼写差异场景)
如果存在拼写缩写、漏字等更复杂的差异,可以用编辑距离计算相似度,取匹配度最高的结果,需要用到fuzzywuzzy库:
- 先安装依赖:
pip install fuzzywuzzy python-Levenshtein - 代码实现:
from fuzzywuzzy import process hometeam = 'Manchester City' # 从球队列表中匹配相似度最高的结果,返回格式为(匹配字符串, 相似度分数, 索引) best_match = process.extractOne(hometeam, df['Teams'].tolist()) # 设置相似度阈值,避免匹配到完全不相关的内容 if best_match[1] >= 80: pts_man_city = df[df['Teams'] == best_match[0]].iloc[0]['Pts'] print(pts_man_city) # 输出结果为32 else: print("未找到匹配度足够的球队")
内容的提问来源于stack exchange,提问作者gromme12
相关产品推荐
相关产品推荐

