Python 使用pandas pd.cut生成带有statsmodels的分类变量
我尝试使用pd.cut从连续变量创建一个分类变量。我想在随后的statsmodel定义的回归中使用它,包括这个虚拟变量。当我以这种方式创建一个分类变量时,我会得到一个错误Python 使用pandas pd.cut生成带有statsmodels的分类变量,python,pandas,statsmodels,categorical-data,Python,Pandas,Statsmodels,Categorical Data,我尝试使用pd.cut从连续变量创建一个分类变量。我想在随后的statsmodel定义的回归中使用它,包括这个虚拟变量。当我以这种方式创建一个分类变量时,我会得到一个错误 TypeError: data type not understood. 下面包括一个测试用例 import numpy as np import pandas as pd import statsmodels as sm import statsmodels.formula.api as smf df = pd.D
TypeError: data type not understood.
下面包括一个测试用例
import numpy as np
import pandas as pd
import statsmodels as sm
import statsmodels.formula.api as smf
df = pd.DataFrame(np.random.randn(6,4))
df.columns = ['A', 'B', 'C', 'D']
df['ttt']=pd.cut(df['D'], bins=2)
test = smf.ols('A ~ B + ttt', data=df).fit()
我肯定我做错了什么。任何帮助都将不胜感激。我不确定statsmodels在支持pandas中新的
分类类型方面究竟处于什么位置。目前,您可能需要将分类转换回对象类型才能工作(请检查生成的ols拟合是否合理,我不知道您尝试执行的操作的全部细节):
你的熊猫版本是什么?如果您使用的是0.15,那么它有新的和改进的分类数据类型,这些类型是最近才引入的,而其他像statsmodels这样依赖pandas的库可能还没有跟上。我也有同样的问题,我使用的是pandas 0.15.1。patsy/statsmodels似乎还不支持pandas的新分类数据类型。请看@Marius的回答。是的,我还使用了pandas 0.15.1和statsmodels 0.6。这个解决方案对我有效。非常感谢你的帮助。我非常感激。
df['ttt_fixed'] = df.ttt.astype(np.object)
test = smf.ols('A ~ B + ttt_fixed', data=df).fit()
test.summary()