2016-11-23 2 views
2

folgendes Beispiel:Zahlen als Variablennamen nicht von statsmodels.formula.api erkannt

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]}) 

Dann smf.ols('a ~ b', df) smf.ols('177sdays ~ b', df2)

Und das erste Werk, und die zweite nicht. Der einzige Unterschied scheint das Vorhandensein numerischer Zeichen im Variablennamen zu sein. Warum ist das?

+0

Insbesondere generiert es Fehler ungültige Syntax! – user7147790

+0

... gültige Python-Namen dürfen nicht mit Zahlen beginnen. Vielleicht gibt es unter der Haube ein Eval in Statistikmodellen. Versuchen Sie, mit einem Unterstrich voranzukommen. –

+0

'Q' kann beliebige Variablennamen" zitieren "http://patsy.readthedocs.io/en/latest/builtins-reference.html#patsy.builtins.Q – user333700

Antwort

3

Offenbar verwendet statsmodels eine Bibliothek mit der Bezeichnung patsy, um die an ols übergebenen Formeln zu interpretieren. Vom docs ein Expressen der Form:

y ~ a + a:b + np.log(x) 

Wird ein Patsy Ziel der Form konstruieren: "führt beliebigen Python-Code"

ModelDesc([Term([EvalFactor("y")])], 
     [Term([]), 
     Term([EvalFactor("a")]), 
     Term([EvalFactor("a"), EvalFactor("b")]), 
     Term([EvalFactor("np.log(x)")])]) 

EvalFactor dann Daher müssen Ihre Variablennamen gültig sein Python identifiers.. I.e. die Groß- und Kleinbuchstaben A bis Z, der Unterstrich _ und, bis auf das erste Zeichen, die Ziffern 0 bis 9.

+0

Vielen Dank! Das war sehr klar. – user7147790

+0

Das war sehr hilfreich. Sonst ist es ein "Gotcha" mit einer vagen Fehlermeldung. Vielen Dank! – Jeff

Verwandte Themen