考虑以下示例:
import pandas as pd
from pandas import DataFrame
import statsmodels.formula.api as smf
df = DataFrame({'a': [1,2,3], 'b': [2,3,4]})
df2 = DataFrame({'177sdays': [1,2,3], 'b': [2,3,4]})
然后
smf.ols('a ~ b', df) smf.ols('177sdays ~ b', df2)
而第一项工作和第二项工作没有。唯一的区别似乎是变量名称中存在数字字符。为什么是这样?
最佳答案
显然,statsmodels
使用一个名为patsy
的库来解释传递给ols
的公式。在docs中,形式为:
y ~ a + a:b + np.log(x)
将构造以下形式的patsy对象:
ModelDesc([Term([EvalFactor("y")])],
[Term([]),
Term([EvalFactor("a")]),
Term([EvalFactor("a"), EvalFactor("b")]),
Term([EvalFactor("np.log(x)")])])
EvalFactor
然后“执行任意Python代码”。因此,您的变量名必须是有效的Python identifiers。 IE。大写和小写字母A到Z,下划线_,以及第一个字符之外的数字0到9。
关于python - statsmodels.formula.api无法识别为变量名称的数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40754553/