gpt4 book ai didi

python - 如何使用 nans 对 pandas 列进行 zscore 标准化?

转载 作者:太空狗 更新时间:2023-10-29 16:53:54 24 4
gpt4 key购买 nike

我有一个 pandas 数据框,其中包含一列我想要 zscore 归一化的实数值:

>> a
array([ nan, 0.0767, 0.4383, 0.7866, 0.8091, 0.1954, 0.6307,
0.6599, 0.1065, 0.0508])
>> df = pandas.DataFrame({"a": a})

问题是单个 nan 值使所有数组 nan:

>> from scipy.stats import zscore
>> zscore(df["a"])
array([ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan])

zscore(或不是来自 scipy 的等效函数)应用于 pandas 数据框的列并让它忽略 nan 值的正确方法是什么?对于无法规范化的值,我希望它与带有 np.nan 的原始列具有相同的维度

编辑:也许最好的解决方案是使用scipy.stats.nanmeanscipy.stats.nanstd?我不明白为什么需要为此更改 std 的自由度:

zscore = lambda x: (x - scipy.stats.nanmean(x)) / scipy.stats.nanstd(x)

最佳答案

pandas 的 版本的 meanstd 将传递 Nan 所以你可以计算方式(为了与 scipy zscore 相同,我认为你需要在 std 上使用 ddof=0):

df['zscore'] = (df.a - df.a.mean())/df.a.std(ddof=0)
print df

a zscore
0 NaN NaN
1 0.0767 -1.148329
2 0.4383 0.071478
3 0.7866 1.246419
4 0.8091 1.322320
5 0.1954 -0.747912
6 0.6307 0.720512
7 0.6599 0.819014
8 0.1065 -1.047803
9 0.0508 -1.235699

关于python - 如何使用 nans 对 pandas 列进行 zscore 标准化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23451244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com