【发布时间】:2020-09-18 19:23:07
【问题描述】:
我正在尝试使用 boxcox 转换来转换我的数据。由于值为 0,我考虑在ValueError: Data must be positive (boxcox scipy) 中找到以下方法,但现在我收到值错误,说数据不能保持不变。这是我的方法:
posdata = df1[df1['hotel'] > 0]['hotel']
bcdata, lam = boxcox(posdata)
bc = np.empty_like(df1['hotel'])
bc[df1['hotel'] > 0] = bcdata
bc[df1['hotel'] == 0] = -1/lam
我收到此错误:
ValueError Traceback (most recent call last)
<ipython-input-163-551b3ccca575> in <module>
1 posdata = df1[df1['hotel'] > 0]['hotel']
2 bcdata, lam = boxcox(posdata)
3 bc = np.empty_like(df1['hotel'])
4 bc[df1['hotel'] > 0] = bcdata
5 bc[df1['hotel'] == 0] = -1/lam
~\AppData\Roaming\Python\Python37\site-packages\scipy\stats\morestats.py in boxcox(x, lmbda, alpha)
1040
1041 if np.all(x == x[0]):
1042 raise ValueError("Data must not be constant.")
1043
1044 if any(x <= 0):
ValueError: Data must not be constant.
【问题讨论】:
-
posdata的内容是什么
-
posdata 只是一个变量,它具有从 df1 的酒店列中提取的系列。检查代码的第一行。内容是整数值。
-
它表示您所有的
postdata值都相同,但boxcox需要不同的值。您可以在第一行之后检查所有值是否与print(postdata.unique())相同。 -
@V.Ayrat 谢谢我明白了。不幸的是,我取了错误的列,其值为 0 和 1,并且当我取的值大于 0 时,只剩下值 1。这就是为什么它给我的错误不是恒定的。