对于 sparse.hstack,将 pandas 转换为 numpy.ndarray

Convert pandas to numpy.ndarray for sparse.hstack

我尝试解决下一个问题

import numpy as np
import pandas as pd
from scipy import sparse

X1 = sparse.rand(10, 10000) 
df = pd.DataFrame({ 'a': range(10)})

事实上,我从 TfidfVectorizer 得到了 X1,但为了简洁起见,我放弃了代码

我想应用 sparse.hstack 在回归中使用这两个变量。 我将 pandas 转换为 numpy.ndarray 如下

X2 = df['a'].as_matrix()
type(X2)
numpy.ndarray
X = sparse.hstack((X1,X2))
ValueError                                Traceback (most recent call last)
<ipython-input-38-9493e3833c5d> in <module>()
----> 1 X = sparse.hstack((X1,X2))

C:\Program Files\Anaconda3\lib\site-packages\scipy\sparse\construct.py in hstack(blocks, format, dtype)
    462 
    463     """
--> 464     return bmat([blocks], format=format, dtype=dtype)
    465 
    466 

C:\Program Files\Anaconda3\lib\site-packages\scipy\sparse\construct.py in bmat(blocks, format, dtype)
    579                 elif brow_lengths[i] != A.shape[0]:
    580                     raise ValueError('blocks[%d,:] has incompatible '
--> 581                                      'row dimensions' % i)
    582 
    583                 if bcol_lengths[j] == 0:

ValueError: blocks[0,:] has incompatible row dimensions

怎么了?

您的数组必须具有相同的第一维大小,并且每个数组必须至少包含一行。

您可以通过 X1.shape()X2.shape()

检查

我做了如下操作。有效

import numpy as np
import pandas as pd
from scipy import sparse

X1 = sparse.rand(10, 10000)
df = pd.DataFrame({ 'a': range(10)})

X2 = df['a'].reset_index()
X2 = X2.iloc[:,[1]].values

X = sparse.hstack((X1,X2))