2016-11-23 1 views
2

によって認識されていない変数名は、次の例を考えてみましょうとして数:statsmodels.formula.api

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)

そして、最初の仕事と第二にはありません。唯一の違いは、変数名に数字の文字があるようです。どうしてこれなの?

+0

特に、無効な無効な構文が生成されます。 – user7147790

+0

...有効なpythonの名前は数字で始めることはできません。おそらく、フードの下には、統計モデルの評価があります。接頭辞にアンダースコアを付けてください。 –

+0

'Q'は任意の変数名を"引用 "できますhttp://patsy.readthedocs.io/en/latest/builtins-reference.html#patsy.builtins.Q – user333700

答えて

3

明らかに、statsmodelsolsに渡される式を解釈するためにpatsyというライブラリを使用します。 docsからフォームのexpressen:

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

フォームのパッツィオブジェクト構築します:

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

EvalFactorを次に "任意のPythonコードを実行します。"したがって、変数名は有効なPython identifiers.でなければなりません。私。 大文字と小文字A〜Z、アンダースコア_、最初の文字を除く0〜9の数字。

+0

ありがとう!これは非常に明確でした。 – user7147790

+0

これは非常に役に立ちました。それ以外の場合は、完全に曖昧なエラーメッセージが表示されます。ありがとう! – Jeff