使用pingouin计算ICC时遇缺失值不足的AssertionError错误如何解决?
解决Pingouin计算ICC时的"Data must have at least 5 non-missing values"错误
问题描述
我想用Pingouin库的pg.intraclass_corr()函数计算ICC,代码如下:
import pingouin as pg c_list = list(df.columns) df_day = pd.read_excel(savefile) for i in range(0, len(c_list)): res = f"{c_list[i]}: {pg.intraclass_corr(data=df_day,targets='dataSource',raters='Day',ratings=c_list[i],nan_policy='omit')}" print(res)
但一直报错:AssertionError: Data must have at least 5 non-missing values。我已经用isna()和count()检查过列的非缺失值,没找到少于5的列,数据量应该足够,请问怎么解决?
解决方案
检查三列组合后的有效行数
你只单独检查了ratings列的非缺失值,但pg.intraclass_corr()需要targets(dataSource)、raters(Day)、ratings(目标列)三列同时非空的行才会被计入有效样本。如果某行的dataSource或Day为空,哪怕目标列有值也会被过滤,最终有效行数可能不足5。用以下代码排查每列对应的有效样本数:for col in c_list: valid_rows = df_day[['dataSource', 'Day', col]].dropna() print(f"{col}: 有效行数 {len(valid_rows)}")验证分组维度的样本量
Pingouin的ICC计算对targets和raters的分组数量有隐含要求:raters(Day)的唯一分组数不能少于2targets(dataSource)的唯一分组数不能少于3
哪怕总有效行数≥5,分组数量不达标也会触发错误。用以下代码检查分组情况:
print(f"raters(Day)的唯一数量:{df_day['Day'].nunique()}") print(f"targets(dataSource)的唯一数量:{df_day['dataSource'].nunique()}")修正循环中的列来源混淆
代码中c_list基于df的列生成,但后续计算用的是df_day,如果两个DataFrame结构不一致,c_list中的列可能在df_day中不存在,或者这些列在df_day中的非缺失值实际不足5。应确保列列表基于目标数据集生成:# 只保留需要计算的数值列,排除分组列 c_list = [col for col in df_day.columns if col not in ['dataSource', 'Day']]
内容的提问来源于stack exchange,提问作者Only
相关产品推荐
相关产品推荐

