如何让Patsy公式识别含连字符的变量名而非减法运算
解决Patsy误解析带连字符列名的问题
哈哈,这个坑我踩过!Patsy的公式语法默认会把连字符当成减法运算符,所以你写的VOLT ~ B-NN会被它误读成VOLT ~ B - NN,找不到B变量太正常了。给你两个简单有效的解决办法:
用反引号包裹变量名:这是最直接的方式,把带特殊字符的列名用反引号
``包起来,Patsy就会把它当作完整的变量名处理,不会拆分解析。示例代码:import pandas as pd import statsmodels.formula.api as smf # 假设你的DataFrame是df model = smf.ols(formula='VOLT ~ `B-NN`', data=df).fit()使用Patsy的Q()函数:如果反引号的写法你觉得不够直观,还可以用Patsy专门提供的
Q()函数(全称Quote),把变量名字符串传进去,明确告诉Patsy不要解析其中的特殊语法:model = smf.ols(formula='VOLT ~ Q("B-NN")', data=df).fit()
如果需要同时用到多个带连字符的变量(比如B-NN和B-IDW),两种方法都可以扩展使用:
# 反引号写法 model = smf.ols(formula='VOLT ~ `B-NN` + `B-IDW`', data=df).fit() # Q()函数写法 model = smf.ols(formula='VOLT ~ Q("B-NN") + Q("B-IDW")', data=df).fit()
这两种方法都能完美保留你需要的含连字符列名,不会影响后续的下游流程~
内容的提问来源于stack exchange,提问作者BillyJo_rambler
相关产品推荐
相关产品推荐

