熊猫系列:日志标准化

时间:2016-06-17 21:49:24

标签: python pandas normalization

我有一个Pandas系列,需要进行对数转换才能正常分布。但是我还没有记录转换,因为有值= 0且值低于1(0-4000)。因此,我想首先规范系列。我听说过StandardScaler(scikit-learn),Z-score标准化和Min-Max缩放(标准化)。 我想稍后对数据进行聚类,这是最好的方法吗? StandardScaler和Z-score标准化使用均值,方差等。我可以在“尚未正常分布”的数据上使用它们吗?

2 个答案:

答案 0 :(得分:0)

要转换为对数,您需要正值,因此将值范围(-1,1)转换为规范化(0,1),如下所示

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.uniform(-1,1,(10,1)))
df['norm'] = (1+df[0])/2 # (-1,1] -> (0,1]
df['lognorm'] = np.log(df['norm'])

会产生类似

的数据框
          0      norm   lognorm
0  0.360660  0.680330 -0.385177
1  0.973724  0.986862 -0.013225
2  0.329130  0.664565 -0.408622
3  0.604727  0.802364 -0.220193
4  0.416732  0.708366 -0.344795
5  0.085439  0.542719 -0.611163
6 -0.964246  0.017877 -4.024232
7  0.738281  0.869141 -0.140250
8  0.558220  0.779110 -0.249603
9  0.485144  0.742572 -0.297636

答案 1 :(得分:0)

如果您的数据在(-1; +1)范围内(假设您在问题中丢失了减号),则日志转换可能不是您需要的。至少从理论的角度来看,它显然是错误的事情。

也许您的数据已经过预处理(不充分)?你能得到原始数据吗? 为什么您认为日志转换会有所帮助?

如果你不关心什么是有意义的事情,你可以调用log1p,它与log(1+x)相同,因此可以使用(-1;∞) )。