如何处理Pandas GroupBy查询时出现的KeyError(key)异常?
处理Pandas分组查询的KeyError问题
首先是你用到的读取数据和分组代码:
import pandas as pd colnames = ['Date', 'Items', 'Quantity', 'Price'] df1 = pd.read_csv('data_assignment_1.txt', sep=" ", names=colnames, header=None) # 按日期和物品分组求和 groupby_date_item = df1.groupby(['Date', 'Items'])['Quantity'].sum()
当查询不存在的日期-物品组合(比如('2020-09-23', 'Item_D'))时会触发KeyError,可以用以下几种方式处理:
方法1:使用.get()方法返回默认值
Series.get()方法支持指定键不存在时的默认返回值,比如用0代表该日期下该物品无销量:
# 查询存在的组合 print(groupby_date_item.get(('2020-09-23', 'Item_A'), default=0)) # 输出:3 # 查询不存在的组合 print(groupby_date_item.get(('2020-09-23', 'Item_D'), default=0)) # 输出:0
方法2:用try-except捕获异常
如果需要自定义错误处理逻辑(比如打印提示),可以直接捕获KeyError:
try: print(groupby_date_item[('2020-09-23', 'Item_D')]) except KeyError: print("该日期-物品组合不存在或输入有误")
方法3:预先生成完整的日期-物品组合
如果希望所有可能的日期和物品组合都有对应值(不存在的填0),可以先构建完整的MultiIndex,再重新索引分组结果:
# 获取所有唯一日期和物品 all_dates = df1['Date'].unique() all_items = df1['Items'].unique() # 生成所有可能的日期-物品组合 full_index = pd.MultiIndex.from_product([all_dates, all_items], names=['Date', 'Items']) # 重新索引,不存在的组合填充0 groupby_full = groupby_date_item.reindex(full_index, fill_value=0) # 现在查询任意组合都不会报错 print(groupby_full[('2020-09-23', 'Item_D')]) # 输出:0 print(groupby_full[('2020-09-25', 'Item_A')]) # 输出:0
内容的提问来源于stack exchange,提问作者jjbkd
相关产品推荐
相关产品推荐

