【问题标题】:Removal of List from Pandas DataFrame从 Pandas DataFrame 中删除列表
【发布时间】:2020-02-10 07:41:21
【问题描述】:
    ProArticle                                          Vector

0   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() sn-p。

type(data.Vector[0])list

我需要对这个矢量化数据使用 KMeans 聚类,但列表不允许我这样做。

data.Vector.shape179data.Vector[0].shape8868

如何删除列表,或者如果我不能,那么如何使用它对给定数据进行聚类?也许我可以通过以下方式获得一个数据框,然后在其上运行 PCA。

预期输出如下所示:

【问题讨论】:

  • 请包括预期输出。是否要将 VectorProArticle 的每个元素拆分为单独的行?
  • 我已经添加了预期的输出。
  • this

标签: python pandas list machine-learning k-means


【解决方案1】:

您似乎想要做的是从包含数字列表的 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)
>>> vs
array([[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 数据框,您可以使用apply 创建每个列表的 Pandas 系列;根据apply's documentation,这会产生一个DataFrame:

>>> df.Vector.apply(pd.Series)
   0  1
0  0  0
1  1  1
2  2  2
3  3  3

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

【讨论】:

  • 对不起,也许我的问题没有正确提出。我做了一些修改。
  • 我在您的编辑后扩展了答案,有帮助吗?
猜你喜欢
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多