python - Scipy hstack 结果为 "TypeError: no supported conversion for types: (dtype(' float6 4'), dtype(' O'))"

标签 python python-3.x numpy pandas dataframe

我正在尝试运行 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)

然后我阅读我的文本专栏并运行 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)

最后,我想将它们全部连接在一起,这就是我们的错误发生并且程序无法运行的地方,而且我不确定我是否在这里适本地使用了 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)

完整错误信息:

---------------------------------------------------------------------------
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'))

最佳答案

Numpy hstack - "ValueError: all the input arrays must have same number of dimensions" - but they do 中所述许多人需要明确地将输入转换为 sparse.hstack稀疏 代码不如核心 numpy 代码健壮。

如果Xdtype=float 的稀疏数组,而Adtype=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
如果 A 包含一些 NaN

A.astype(float) 将起作用。参见 http://pandas.pydata.org/pandas-docs/stable/gotchas.html关于 NaN。如果 A 由于某些其他原因(例如,不规则列表)而成为对象,那么我们将不得不重新审视该问题。

另一种可能性是使用 Pandas 的 concathttp://pandas.pydata.org/pandas-docs/stable/merging.html .我认为 Pandas 比 sparse 编码人员更关注这些问题。

关于python - Scipy hstack 结果为 "TypeError: no supported conversion for types: (dtype(' float6 4'), dtype(' O'))",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22273242/

相关文章:

python - 从Python中的numpy数组输入获取 'Day of Year'数组

python - 从 Pandas DataFrame 中选择列中具有有限值的最新索引的有效方法?

Python Regex - 如何将给定的正则表达式模式限制为一定范围的字符

python - 关闭我在 fdopen 中使用的文件描述符

python - 使用 python 和 numpy 计算正则化损失函数的梯度

python - 向 cv2.imshow() 提供大 (4017*3007) 图像不会显示整个图像

python - 为什么即使值不存在,python 的 bisect_left 也会返回有效索引?

python-3.x - pyodbc - 使用默认值将列添加到 MS Access

python - 使用 numpy.loadtxt 加载包含 float 和字符串的文本文件

python - 解析 pandas Dataframe 并根据不同条件应用规则