pandas调用value_counts()未找到目标值时如何赋值0规避KeyError
问题描述
我有如下结构的DataFrame列:
group A A A B B C
列中的值C有时存在、有时不存在。当C存在时以下代码可正常运行,但如果该列未出现C,就会抛出KeyError:
value_counts = df.group.value_counts() new_df["C"] = value_counts.C
我需要实现逻辑:检查C是否存在对应的频次统计结果,若不存在则为new_df["C"]赋值0。我尝试编写了如下判断代码但依然会触发KeyError,求可行解决方法:
value_counts = df.group.value_counts() new_df["C"] = value_counts.C if (df.group.value_counts()['consents']): new_df["C"] = value_counts.consents else: new_df["C"] = 0
问题原因
原代码报错有两个核心问题:
- 还没做存在性判断,就先执行了
new_df["C"] = value_counts.C,C不存在时这行直接抛出KeyError,后续判断逻辑根本不会运行 - 判断条件里查找的键是
'consents',和实际需要统计的C不匹配,即使走到判断分支也会取错值
可行解决方案
- 方案1(最简洁):使用Series的
get()方法,直接指定键不存在时的默认返回值,不需要额外写分支判断
value_counts = df.group.value_counts() # 存在"C"则返回对应计数,不存在直接返回0 new_df["C"] = value_counts.get("C", 0)
- 方案2:先判断目标值是否在计数结果的索引中,再分支赋值
value_counts = df.group.value_counts() new_df["C"] = value_counts["C"] if "C" in value_counts.index else 0
- 方案3:使用
reindex方法填充缺失值,适合需要同时取多个分组计数的场景
value_counts = df.group.value_counts() # 重新索引指定要取的分组,缺失值自动填0 count_c = value_counts.reindex(["C"], fill_value=0).iloc[0] new_df["C"] = count_c
内容的提问来源于stack exchange,提问作者user12270555
相关产品推荐
相关产品推荐

