Python Pandas中使用get_group方法获取分组时出现KeyError的问题咨询
解决Pandas中groupby.get_group的KeyError问题
我来帮你分析一下这两个KeyError的问题,根源都是你传入的键类型和分组列的类型不匹配,下面逐个给出解决方法:
1. 处理load_group的KeyError
从df0.info()的输出能看到,load_group是category类型,而你传入的是字符串'(20, 25]',这里可能存在两个问题,我们一步步排查解决:
第一步:确认分组类别是否真实存在
先执行代码打印load_group所有可用的类别,检查是否有格式差异(比如空格、符号写错):
print(df0['load_group'].cat.categories)
看看输出里是否包含'(20, 25]',比如要注意是不是类别里实际是'(20,25]'(没有空格)。
第二步:匹配正确的键获取分组
如果确认类别存在,有两种可靠的解决方式:
- 方式一:严格匹配类别字符串(包括空格和符号)直接调用:
df0.groupby('load_group').get_group('(20, 25]') - 方式二:临时将
category转为object类型再分组(适合不确定类型匹配的场景,但category类型更高效,优先用方式一):df0['load_group'] = df0['load_group'].astype(object) df0.groupby('load_group').get_group('(20, 25]')
2. 处理month_year的KeyError
month_year的类型是period[M](月份周期类型),你传入的字符串'2016-07'无法直接匹配到Period对象,所以触发KeyError。
解决方法:传入对应类型的Period对象
你需要创建一个和列类型匹配的pd.Period实例作为键:
import pandas as pd # 创建指定月份的周期对象 target_month = pd.Period('2016-07', freq='M') df0.groupby('month_year').get_group(target_month)
也可以写成更简洁的形式:
df0.groupby('month_year').get_group(pd.Period('2016-07', 'M'))
补充小技巧:快速确认分组键的类型和值
如果你不确定分组后的键是什么类型,可以先打印所有分组键直观查看:
# 查看load_group的分组键 print(list(df0.groupby('load_group').groups.keys())) # 查看month_year的分组键 print(list(df0.groupby('month_year').groups.keys()))
这样就能精准匹配键的类型和值,避免类型不匹配的问题。
内容的提问来源于stack exchange,提问作者swhh
相关产品推荐
相关产品推荐

