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

使用Z-score算法分析Kaggle数据时代码返回-inf问题求助

Z-score计算出现-inf问题的排查与解决

在分析数据受欢迎度时,使用Z-score算法计算时遇到代码运行异常,输出的k值为-inf,以下是问题排查和解决方法:

原始代码

for header in data.columns:

  # average
  sum = 0
  n = 0
  crab = 0
  for i in data[header]:
    sum += ele
    n += 1
    average = sum / n
    # standard Deviation


  for j in data[header]:
      crab = np.std(crab)

  for k in data[header]:
    k = (k - average) / crab
    print("k = ",k)
    break


print(data.shape) 
data.info()
data.hist(figsize=(14, 14))
%config InlineBackend.print_figure_kwargs={'facecolor' : "w"} 

问题根源

  1. 变量引用错误:第一个循环中使用sum += ele,但循环变量是i,未定义的ele会导致报错(若未报错则sum始终为0,均值average为0)
  2. 标准差计算逻辑错误:初始crab=0,第二个循环中反复对0求标准差,结果始终为0,后续除以0直接导致-inf
  3. 冗余循环逻辑:均值计算无需在循环内反复赋值average;标准差不需要遍历每个元素重复计算
  4. Z-score计算不完整:仅处理第一个元素就break,未覆盖整列数据

修正后的代码

手动计算优化版

import numpy as np

for header in data.columns:
    col_values = data[header].values
    # 计算均值
    average = np.mean(col_values)
    # 计算样本标准差(ddof=1,若为总体标准差可去掉该参数)
    std_dev = np.std(col_values, ddof=1)
    
    # 处理标准差为0的特殊情况
    if std_dev == 0:
        print(f"列 {header} 所有值相同,无法计算Z-score")
        continue
    
    # 计算整列的Z-score
    z_scores = (col_values - average) / std_dev
    print(f"列 {header} 的Z-score示例: {z_scores[:5]}")

# 后续数据探索代码保持不变
print(data.shape) 
data.info()
data.hist(figsize=(14, 14))
%config InlineBackend.print_figure_kwargs={'facecolor' : "w"} 

Pandas简洁版

直接利用Pandas内置函数批量计算,效率更高:

# 批量计算所有列的Z-score
z_score_df = (data - data.mean()) / data.std(ddof=1)
print(z_score_df.head())

# 后续数据探索代码保持不变
print(data.shape) 
data.info()
data.hist(figsize=(14, 14))
%config InlineBackend.print_figure_kwargs={'facecolor' : "w"} 

关键修正说明

  • 用Numpy/Pandas内置的mean()和std()函数替代手动循环,避免逻辑错误
  • 增加标准差为0的判断,防止除以0的异常
  • 一次性计算整列的Z-score,保证数据处理的完整性

内容的提问来源于stack exchange,提问作者Mark Jacobs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:06:19