【发布时间】:2020-05-23 09:43:55
【问题描述】:
我正在尝试一次计算一系列列的 z 分数,但检查数据显示列的平均值不是 0,正如您在计算 z 分数时所期望的那样。
通过运行下面的代码可以看到,列a和列d在新创建的*_zscore列中没有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
有人知道这里发生了什么吗?有错误的列包含更高的值,但也应该可以对它们进行 z 变换。
编辑:正如 Rob 指出的那样,结果基本上是 0。
【问题讨论】:
-
我认为它只是一个舍入错误。非 0 值基本上是 0 到逗号后的第 16 位。也许 R 使用不同的浮点算法