在sklearn中是否有任何支持直接在拟合模型中使用Panda的Categorical数据类型?从我所看到的sklearn不支持这种数据类型是不幸的,因为Categorical数据类型既编码分类数据又包含数据的映射方案.另外,分类编码纯粹是一个数据处理/处理问题,因此它似乎更自然地由Pandas处理.
注意
我意识到有几种方法可以对Pandas和sklearn中的分类变量进行编码 - 这不是我所要求的.
使用numpy ndarray,可以一次写入多个列而无需先复制(只要它们相邻).如果我想写一个数组的前三列,我会写
a[0,0:3] = 1,2,3 # this is very fast ('a' is a numpy ndarray)
Run Code Online (Sandbox Code Playgroud)
我希望在熊猫中我同样能够通过"标签切片"选择多个相邻的列,如此(假设前3列标记为'a','b','c')
a.loc[0,'a':'c'] = 1,2,3 # this works but is very slow ('a' is a pandas DataFrame)
Run Code Online (Sandbox Code Playgroud)
或类似的
a.iloc[0,3:6] = 1,2,3 # this is equally as slow
Run Code Online (Sandbox Code Playgroud)
但是,与写入仅需几微秒的numpy数组相比,这需要几百毫秒.我不清楚大熊猫是否正在制作阵列的副本.我能找到以这种方式写入数据帧以提供良好速度的唯一方法是直接处理底层的ndarray
a.values[0,0:3] = 1,2,3 # this works fine and is fast
Run Code Online (Sandbox Code Playgroud)
我是否遗漏了Pandas文档中的内容,或者他们无法在Pandas数据帧上进行多个相邻列索引,速度可与numpy相媲美?
编辑
这是我正在使用的实际数据框架.
>> conn = sqlite3.connect('prath.sqlite')
>> prath = pd.read_sql("select image_id,pixel_index,skin,r,g,b from pixels",conn)
>> prath.shape
(5913307, 6)
>> prath.head()
image_id pixel_index skin r g b
0 21 …Run Code Online (Sandbox Code Playgroud)