0

代码如下所示:

import statsmodels.formula.api as smf

df = pd.read_csv('reg_data.csv')
f = 'inf ~ rh*temp*tl*Tt*C(location)'   
lm = smf.ols(formula = f, data=df).fit()

但它总是给我一个错误:

numbers besides '0' and '1' are only allowed with **

文件中的数据都是不同的数字。有些有 2 个小数,有些有更多。有什么想法可以解决这个问题并获得回归摘要吗?(由lm.summary()

先感谢您!

4

1 回答 1

2

哦,你发现了一个有趣的错误。

首先,错误消息不是在谈论数据中的数字。当您在公式中输入文字数字时会出现该错误消息,例如"y ~ 3*x"它会引发该错误,因为它不喜欢 3。

但是您的公式中没有任何数字,那是怎么回事?好吧,您在公式解析器中遇到了一个错误:它检查某事物是否为数字的方式是检查您是否可以将其传递给int(...)orfloat(...)并返回一个值。但在 Python 中,float("inf")是一个有效的表达式,它返回表示无穷大的浮点值,即使 plaininf在 Python 中并不是一个数字。

我在这里提交了错误:https ://github.com/pydata/patsy/issues/118

目前的解决方法是避免使用该字符串inf作为其中一列的名称。(出于同样的原因,您可能也应该避免nan。)对此感到抱歉!

于 2018-01-22T10:52:36.567 回答