Numpy hstack - “ValueError: tous les tableaux doivent avoir le même nombre de dimensions” -, mais ils ne

J'essaie de joindre les deux tableaux numpy. Dans l'un j'ai un ensemble de colonnes/fonctionnalités après l'exécution de TF-IDF sur une seule colonne de texte. Dans l'autre, j'ai une colonne/caractéristique qui est un entier. J'ai donc lu dans une colonne de train et les données de test, exécution TF-IDF sur ce, et puis je veux ajouter une autre colonne de type integer, car je pense que cela va aider mon classificateur en savoir plus précisément comment il doit se comporter.

Malheureusement, j'obtiens l'erreur dans le titre, lorsque j'essaie de l'exécuter hstack pour ajouter cette seule colonne de mon tableau numpy.

Voici mon code :

  #reading in test/train data for TF-IDF
traindata = list(np.array(p.read_csv('FinalCSVFin.csv', delimiter=";"))[:,2])
testdata = list(np.array(p.read_csv('FinalTestCSVFin.csv', delimiter=";"))[:,2])
#reading in labels for training
y = np.array(p.read_csv('FinalCSVFin.csv', delimiter=";"))[:,-2]
#reading in single integer column to join
AlexaTrainData = p.read_csv('FinalCSVFin.csv', delimiter=";")[["alexarank"]]
AlexaTestData = p.read_csv('FinalTestCSVFin.csv', delimiter=";")[["alexarank"]]
AllAlexaAndGoogleInfo = AlexaTestData.append(AlexaTrainData)
tfv = TfidfVectorizer(min_df=3,  max_features=None, strip_accents='unicode',  
analyzer='word',token_pattern=r'\w{1,}',ngram_range=(1, 2), use_idf=1,smooth_idf=1,sublinear_tf=1) #tf-idf object
rd = lm.LogisticRegression(penalty='l2', dual=True, tol=0.0001, 
C=1, fit_intercept=True, intercept_scaling=1.0, 
class_weight=None, random_state=None) #Classifier
X_all = traindata + testdata #adding test and train data to put into tf-idf
lentrain = len(traindata) #find length of train data
tfv.fit(X_all) #fit tf-idf on all our text
X_all = tfv.transform(X_all) #transform it
X = X_all[:lentrain] #reduce to size of training set
AllAlexaAndGoogleInfo = AllAlexaAndGoogleInfo[:lentrain] #reduce to size of training set
X_test = X_all[lentrain:] #reduce to size of training set
#printing debug info, output below : 
print "X.shape => " + str(X.shape)
print "AllAlexaAndGoogleInfo.shape => " + str(AllAlexaAndGoogleInfo.shape)
print "X_all.shape => " + str(X_all.shape)
#line we get error on
X = np.hstack((X, AllAlexaAndGoogleInfo))

Ci-dessous est la sortie et le message d'erreur :

X.shape => (7395, 238377)
AllAlexaAndGoogleInfo.shape => (7395, 1)
X_all.shape => (10566, 238377)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-12-2b310887b5e4> in <module>()
31 print "X_all.shape => " + str(X_all.shape)
32 #X = np.column_stack((X, AllAlexaAndGoogleInfo))
---> 33 X = np.hstack((X, AllAlexaAndGoogleInfo))
34 sc = preprocessing.StandardScaler().fit(X)
35 X = sc.transform(X)
C:\Users\Simon\Anaconda\lib\site-packages\numpy\core\shape_base.pyc in hstack(tup)
271     # As a special case, dimension 0 of 1-dimensional arrays is "horizontal"
272     if arrs[0].ndim == 1:
--> 273         return _nx.concatenate(arrs, 0)
274     else:
275         return _nx.concatenate(arrs, 1)
ValueError: all the input arrays must have same number of dimensions

Quelle est la cause de mon problème ici? Comment puis-je résoudre ce problème? Aussi loin que je peux voir, je devrais être en mesure de se joindre à ces colonnes? Qu'ai-je mal compris?

Merci.

Edit :

À l'aide de la méthode dans la réponse ci-dessous obtient l'erreur suivante :

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-16-640ef6dd335d> in <module>()
---> 36 X = np.column_stack((X, AllAlexaAndGoogleInfo))
37 sc = preprocessing.StandardScaler().fit(X)
38 X = sc.transform(X)
C:\Users\Simon\Anaconda\lib\site-packages\numpy\lib\shape_base.pyc in column_stack(tup)
294             arr = array(arr,copy=False,subok=True,ndmin=2).T
295         arrays.append(arr)
--> 296     return _nx.concatenate(arrays,1)
297 
298 def dstack(tup):
ValueError: all the input array dimensions except for the concatenation axis must match exactly

Fait intéressant, j'ai essayé d'imprimer la dtype de X et cela a bien fonctionné :

X.dtype => float64

Cependant, en essayant d'imprimer la dtype de AllAlexaAndGoogleInfo comme suit :

print "AllAlexaAndGoogleInfo.dtype => " + str(AllAlexaAndGoogleInfo.dtype) 

produit :

'DataFrame' object has no attribute 'dtype'
Ne allAlexaAndGoogleInfo.append(X) travail? Ma conjecture est que si vous voulez combiner DataFrame objet avec une numpy.ndarray, vous devez utiliser les méthodes fournies par les Pandas. Ou à convertir le DataFrame à une plaine numpy tableau.

OriginalL'auteur Simon Kiely | 2014-03-07