Python 连接具有相同行数但不同列的数组

Python 连接具有相同行数但不同列的数组,python,arrays,numpy,Python,Arrays,Numpy,最后显示的错误是ValueError:所有输入数组必须具有相同数量的维度,但索引0处的数组具有2个维度,索引1处的数组具有0个维度 我希望输出为形状(889,24) 最后一句话(索引1处的数组有0个维度)让我觉得这个问题与形状(n,)和(,n)的奇怪numpy数组有关,但这不应该是个问题,因为维度不是那样的,但我认为我缺少了一些东西 我还尝试过使用许多不同的函数np.hstack,np.vstack,np.column\u stack,但它们要么没有给出所需的输出,要么显示此错误消息ValueE

最后显示的错误是
ValueError:所有输入数组必须具有相同数量的维度,但索引0处的数组具有2个维度,索引1处的数组具有0个维度

我希望输出为形状(889,24)

最后一句话(索引1处的数组有0个维度)让我觉得这个问题与形状(n,)和(,n)的奇怪numpy数组有关,但这不应该是个问题,因为维度不是那样的,但我认为我缺少了一些东西


我还尝试过使用许多不同的函数
np.hstack,np.vstack,np.column\u stack
,但它们要么没有给出所需的输出,要么显示此错误消息
ValueError:串联轴的所有输入数组维度必须精确匹配,但沿维度1,索引0处的数组大小为2,索引1处的数组大小为1,正如上面提到的hpaulj,问题是从OneHotEncoder出来后的
x_cat
类型是
,而不是无法与其他numpy数组连接的numpy数组,这导致在使用shape命令连接和它的维度是
()
。不确定这是否意味着它被展平,但当我尝试使用“重塑”时,它不起作用,并说
ValueError:无法将大小为1的数组重塑为形状(889,22)


我解决这个问题的方法是用
one\u hot=onehotcoder(sparse=False)
替换行
one\u hot=onehotcoder()
,这使得输出矩阵的类型成为一个密集的numpy数组,可以使用
np.concatenate((x\u num,x\u cat),axis=1)
检查arg
axis
,尝试使用
axis=0
try它会给出相同的错误消息
ValueError:所有输入数组必须具有相同的维数,但索引0处的数组具有2个维数,索引1处的数组具有0个维数。
np。串联((x,y),axis=1)
适用于我的虚拟数组,检查数组的数据类型稀疏矩阵不能与
np连接。连接
。看看
np.array(X_cat).shape
。这是您的1d数组。您的
one hot
正在生成一个稀疏矩阵(检查其默认参数)。更改稀疏设置,使结果密集,或使用
sparse.hstack
。这是一个棘手的错误(我以前见过几次),但最终归结为对文档的过于随意的阅读。
def preprocess(numerical , categorical):
    imputer = SimpleImputer()
    x_num = imputer.fit_transform(numerical)
    scaler = StandardScaler()
    x_num = scaler.fit_transform(x_num)
    one_hot = OneHotEncoder()
    x_cat = one_hot.fit_transform(categorical)
    print('X_num Shape : ' , x_num.shape)
    print('X_cat Shape : ' , x_cat.shape)
    
    return np.concatenate((x_num,x_cat),axis = 1)
[Output] X_num Shape :  (889, 2)
         X_cat Shape :  (889, 22)