Python 编码后连接数据帧

Python 编码后连接数据帧,python,pandas,encoding,Python,Pandas,Encoding,我正在尝试将一个数组和一个矩阵组合起来。 具体而言,数组包含数字数据(年),而矩阵包含编码数据 其特点如下: X_a=df.Year Name: Year, Length: 5854, dtype: float64 vectorizer = CountVectorizer() X_t = vectorizer.fit_transform(df['Text'].replace(np.NaN, "")) Out: <5854x8206 sparse matrix of t

我正在尝试将一个数组和一个矩阵组合起来。 具体而言,数组包含数字数据(年),而矩阵包含编码数据

其特点如下:

X_a=df.Year
Name: Year, Length: 5854, dtype: float64

vectorizer = CountVectorizer()
X_t = vectorizer.fit_transform(df['Text'].replace(np.NaN, ""))
Out: <5854x8206 sparse matrix of type '<class 'numpy.int64'>'
        with 25871 stored elements in Compressed Sparse Row format>
X= pd.concat([X_a, X_t], axis=1)
但我有一个错误:

TypeError: cannot concatenate object of type '<class 'scipy.sparse.csr.csr_matrix'>'; only Series and DataFrame objs are valid

错误消息基本上是告诉您问题所在。只能连接熊猫系列和数据帧。SKLearn不返回这些数组,而是返回numpy数组。此外,在这种情况下,它会创建一个稀疏数组

根据易用性和内存性能的不同,您可以在这里做几件事。可能最简单的方法就是使用

X_t = pd.DataFrame(vectorizer.fit_transform(df['Text'].replace(np.NaN, "")).todense(), index=df.index)

但请注意,它会创建一个密集矩阵,然后创建密集数据帧。

错误消息基本上是在告诉您问题所在。只能连接熊猫系列和数据帧。SKLearn不返回这些数组,而是返回numpy数组。此外,在这种情况下,它会创建一个稀疏数组

根据易用性和内存性能的不同,您可以在这里做几件事。可能最简单的方法就是使用

X_t = pd.DataFrame(vectorizer.fit_transform(df['Text'].replace(np.NaN, "")).todense(), index=df.index)

但请注意,它创建了一个密集的矩阵,然后是密集的数据帧。

在投票结束之前,请向我解释原因。我想我已经提供了复制我正在使用的数据集示例所需的所有信息,以及我没有投票关闭的基本代码(pandas和numpy不是我的拿手好戏),但是错误消息是否清楚表明您需要将矩阵转换为不同类型的对象?谢谢snakecharmerb。我想是的,但由于我不熟悉这些转变,我一直遵循我在网上找到的东西。我发现我可以使用pd.concat,但我不知道如何将矩阵转换为另一个对象:(在投票结束之前,向我解释原因。我想我已经提供了复制我正在使用的数据集示例和我没有投票结束的基本代码所需的所有信息(pandas和numpy不是我的包),但错误消息是否清楚表明您需要将矩阵转换为不同类型的对象?感谢snakecharmerb。它这样认为,但由于我不熟悉这些转换,因此我遵循了我在web上找到的方法。我发现我可以使用pd.concat,但我不知道如何将矩阵转换为不同类型的对象对象:(非常感谢你的回答和解释,@Ami tavorytanks非常感谢你的回答和解释,@Ami Tavory