Sim*_*ely 8 python numpy dataframe python-3.x pandas
我正在尝试运行hstack将一列整数值连接到由TF-IDF创建的列列表(因此我最终可以在分类器中使用所有这些列/功能).
我正在使用pandas读取列,检查任何NA值并将它们转换为数据帧中的最大值,如下所示:
OtherColumn = p.read_csv('file.csv', delimiter=";", na_values=['?'])[["OtherColumn"]]
OtherColumn = OtherColumn.fillna(OtherColumn.max())
OtherColumn = OtherColumn.convert_objects(convert_numeric=True)
Run Code Online (Sandbox Code Playgroud)
然后我在我的文本列中读取并运行TF-IDF来创建大量功能:
X = list(np.array(p.read_csv('file.csv', delimiter=";"))[:,2])
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)
tfv.fit(X)
Run Code Online (Sandbox Code Playgroud)
最后,我想将它们加在一起,这就是我们的错误发生而且程序无法运行的地方,而且我不确定我是否在这里正确使用StandardScaler:
X = sp.sparse.hstack((X, OtherColumn.values)) #error here
sc = preprocessing.StandardScaler().fit(X)
X = sc.transform(X)
X_test = sc.transform(X_test)
Run Code Online (Sandbox Code Playgroud)
完整的错误消息:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-13-79d1e70bc1bc> in <module>()
---> 47 X = sp.sparse.hstack((X, OtherColumn.values))
48 sc = preprocessing.StandardScaler().fit(X)
49 X = sc.transform(X)
C:\Users\Simon\Anaconda\lib\site-packages\scipy\sparse\construct.pyc in hstack(blocks, format, dtype)
421
422 """
--> 423 return bmat([blocks], format=format, dtype=dtype)
424
425
C:\Users\Simon\Anaconda\lib\site-packages\scipy\sparse\construct.pyc in bmat(blocks, format, dtype)
537 nnz = sum([A.nnz for A in blocks[block_mask]])
538 if dtype is None:
--> 539 dtype = upcast(*tuple([A.dtype for A in blocks[block_mask]]))
540
541 row_offsets = np.concatenate(([0], np.cumsum(brow_lengths)))
C:\Users\Simon\Anaconda\lib\site-packages\scipy\sparse\sputils.pyc in upcast(*args)
58 return t
59
---> 60 raise TypeError('no supported conversion for types: %r' % (args,))
61
62
TypeError: no supported conversion for types: (dtype('float64'), dtype('O'))
Run Code Online (Sandbox Code Playgroud)
hpa*_*ulj 10
正如Numpy hstack中所讨论的那样 - "ValueError:所有输入数组必须具有相同数量的维度" - 但是他们需要明确地将输入转换为sparse.hstack.该sparse代码是不一样强大的核心numpy代码.
如果X是一个稀疏数组dtype=float,并且A密集dtype=object,则可以使用多个选项.
sparse.hstack(X, A) # error
sparse.hstack(X.astype(object), A) # cast X to object; return object
sparse.hstack(X, A.astype(float)) # cast A to float; return float
hstack(X.A, A) # make X dense, result will be type object
Run Code Online (Sandbox Code Playgroud)
A.astype(float)如果A包含一些将会工作NaN.有关NaN,请参阅http://pandas.pydata.org/pandas-docs/stable/gotchas.html.如果A由于某些其他原因(例如参差不齐的列表)是对象,那么我们将不得不重新审视该问题.
另一种可能性是使用熊猫的concat.http://pandas.pydata.org/pandas-docs/stable/merging.html.我认为熊猫比sparse编码员更关注这些问题.
| 归档时间: |
|
| 查看次数: |
16261 次 |
| 最近记录: |