Pandas映射出现KeyError时,如何忽略错误或删除对应行?
问题场景
现有如下DataFrame:
import pandas as pds import numpy as np data = pds.DataFrame({ 'food': ['bacon','porc braisé','bacon','Pastrami','corned beef','BAcon','pastrami','jambon','saumon fumé', 'bacond'], 'gr' : [4,3,6,7.5,8,3,5,6,7, 2] })
映射字典:
nourr= { 'bacon':'porc', 'porc braisé':'porc', 'pastrami':'boeuf', 'corned beef':'boeuf', 'jambon':'porc', 'saumon fumé': 'poisson' }
原映射代码在遇到food列中字典不存在的键(比如bacond)时,会抛出KeyError: 'bacond',需要避免报错并处理这类不匹配的情况。
两种可行方案
方案1:用字典get()方法(最简单)
字典的get()方法允许指定默认值,键不存在时直接返回默认值,不会触发异常。修改后的代码:
# 用NaN填充不匹配项 data["animal"] = data["food"].map(lambda x: nourr.get(x.lower(), np.nan)) # 或者用自定义文本填充,比如“未知” # data["animal"] = data["food"].map(lambda x: nourr.get(x.lower(), '未知'))
方案2:自定义函数加异常捕获(更灵活)
如果需要在处理不匹配项时执行额外逻辑,可以写个函数用try-except捕获KeyError:
def map_food(food_str): try: return nourr[food_str.lower()] except KeyError: # 这里可以加额外处理逻辑,比如打印日志 return np.nan data["animal"] = data["food"].apply(map_food)
内容的提问来源于stack exchange,提问作者fransua
相关产品推荐
相关产品推荐

