You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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)的唯一分组数不能少于2
    • targets(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 19:22:08