在Python / Pandas中计算Z得分时的非零均值

我试图一次为一系列列计算z分数,但是检查数据后发现列的平均值不为0,这是您期望计算z分数的结果。

如您所见,通过运行以下代码,新创建的* _zscore列中的a列和d列没有0均值。

import pandas as pd
df = pd.DataFrame({'a': [500,4000,20], 'b': [10,20,30], 'c': [30,40,50], 'd':[50,400,20] })

cols = list(df.columns)
for col in cols:
    col_zscore = col + '_zscore'
    df[col_zscore] = (df[col] - df[col].mean())/df[col].std(ddof=0)

print(df.describe())

我的实际数据明显不同,但结果相似(即:非零均值)。我也用过

from scipy import stats
stats.zscore(df)

导致类似的结果。不过,在R中执行相同的转换(即scaled.df <-scale(df))是可行的。

有人知道这里发生了什么吗?有错误的列包含较高的值,但也应该可以对其进行z转换。

评论
  • Haley
    Haley 回复

    您的平均值约为10 ^ -17,对于所有实际目的,该平均值等于零。不能精确归零的原因与浮点数的表示方式(有限精度)有关。