未来警告:方法 .ptp

9

我想知道是哪一行代码或方法导致了Future Warning警告!

predictors = weekly.columns[1:7] # the lags and volume
X = sm.add_constant(weekly[predictors]) # sm: statsmodels
y = np.array([1 if el=='Up' else 0 for el in weekly.Direction.values])
logit = sm.Logit(y,X)
results=logit.fit()
print(results.summary())

C:\Anaconda3\lib\site-packages\numpy\core\fromnumeric.py:2389: 警告:方法 .ptp 将在将来的版本中被弃用并移除。请使用 numpy.ptp 代替。 return ptp(axis=axis, out=out, **kwargs)

FYI: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ptp.html - Warren Weckesser
4个回答

9

weekly[predictors]会返回weekly[[predictors]]数据框的Series表示。由于警告提示使用numpy.ptp,因此将属性values添加到weekly[predictors]将使警告消失,即:

X = sm.add_constant(weekly[predictors].values)

或者您可以使用方法to_numpy()

X = sm.add_constant(weekly[predictors].to_numpy())

它将把weekly[predictors]系列转换为NumPy数组。


1
不幸的是,这个方法会返回一个numpy数组,而不是一个dataframe,这很烦人,因为你会失去列名等信息。 - tmldwn
1
X = weekly[predictors] X['const'] = 1 这将同时给出标题。 - user3476359
1
谢谢@user3476359,这是最简单的解决方案。如果您也关心保留列顺序:sm.add_constant将常数添加为第一列,而X.insert(0,'const',1)也会做同样的事情。 - FlorianH

2

产生这个警告的行是这个:

X = sm.add_constant(weekly[predictors]) # sm: statsmodels

不幸的是,我也遇到了同样的问题。


1
引起警告的行是:


X = sm.add_constant(weekly[predictors]) # sm: statsmodels

这是一个与statsmodels相关的实用程序,它将名为const的列添加到数据框中,其中所有值都为1。由于它不再起作用(使用已弃用的函数),您可以使用另一种方法。我更喜欢pandas内置的assign方法:
X = weekly[predictors].assign(const=1)

甚至可以称之为Intercept,因为这个常量的作用就是这样,并且与statsmodels中formula api保持一致。
X = weekly[predictors].assign(Intercept=1)


0
如果您想保留数据框而不是返回一个numpy数组:
X = pd.DataFrame(sm.add_constant(weekly[predictors].values, has_constant='add'), columns = ['const'] + weekly[predictors].columns.tolist()) 

此外,您的 y 已经是一个 numpy 数组,但如果 y 也恰好是一个 pandas series,则可能需要调用 y.reset_index(),因为一旦将 X 转换为 numpy 数组,您就会失去任何索引。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接