Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pandas pd.cut生成带有statsmodels的分类变量_Python_Pandas_Statsmodels_Categorical Data - Fatal编程技术网

Python 使用pandas pd.cut生成带有statsmodels的分类变量

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

我尝试使用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.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()