从Pandas DataFrame中移除列表

    ProArticle                                          Vector0   Iran jails blogger 14 years An Iranian weblogg...   [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...1   UK gets official virus alert site A rapid aler...   [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...2   OSullivan could run Worlds Sonia OSullivan ind...   [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...3   Mutant book wins Guardian prize A book evoluti...   [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...4   Microsoft seeking spyware trojan Microsoft inv...   [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...

以上是矢量化新闻文章的data.head()片段。

type(data.Vector[0])list

我需要对这些矢量化数据进行KMeans聚类,但列表格式不允许我这样做。

data.Vector.shape179,而 data.Vector[0].shape8868

我该如何移除列表,或者如果不能移除,我该如何使用它来聚类给定的数据?或许我可以先按照以下方式获取一个DataFrame,然后对其运行PCA。

预期输出如下所示:enter image description here


回答:

看起来你想做的,是从包含数字列表的Pandas列中创建一个2D numpy数组。在大多数情况下,你可以将Pandas列视为列表或一维Numpy数组。在这里,你可以使用vstack来将单独的列表堆叠成行:

>>> df = pd.DataFrame({...     "ProArticle": ["a", "b", "c", "d"],...     "Vector": [[0, 0], [1, 1], [2, 2], [3, 3]]... })>>> vs = np.vstack(df.Vector)>>> vsarray([[0, 0],       [1, 1],       [2, 2],       [3, 3]])

这样得到的数组可以直接用于sklearn的KMeans:

>>> kmeans = KMeans(n_clusters=2)>>> kmeans.fit_predict(vs)array([1, 1, 0, 0], dtype=int32)

如果你仍然希望有一个中间结果作为Pandas DataFrame,你可以使用apply来创建每个列表的Pandas系列;根据apply的文档,这将生成一个DataFrame:

>>> df.Vector.apply(pd.Series)   0  10  0  01  1  12  2  23  3  3

然后,你可以通过访问生成的DataFrame的.values成员来获取相同的Numpy数组。然而,这种方法比vstack解决方案慢得多,在我的机器上,1毫秒对比25.4微秒。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注