从DataFram中删除列表

2024-09-19 14:24:21 发布

您现在位置:Python中文网/ 问答频道 /正文

    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, ...

以上是数据头()矢量化新闻文章的片段。你知道吗

type(data.Vector[0])list

我需要在这个向量化数据上使用KMeans集群,但是列表不允许我这样做。你知道吗

data.Vector.shape179data.Vector[0].shape8868。你知道吗

如何删除该列表,或者如果不能,如何使用它对给定数据进行聚类?也许我可以用下面的方法得到一个数据帧,然后在上面运行PCA。你知道吗

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


Tags: 数据an列表datamicrosoftiranvectorblogger
1条回答
网友
1楼 · 发布于 2024-09-19 14:24:21

似乎您要做的是,从包含数字列表的Pandas列中创建一个2D numpy数组。在大多数情况下,可以将Pandas列视为列表或一维Numpy数组。在这里,您可以使用^{}将单独的列表堆叠为行:

>>> 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系列;根据^{}'s documentation这将生成一个数据帧:

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

然后可以通过访问结果数据帧的.values成员来获得相同的Numpy数组。但是,这比vstack解决方案慢得多,在我的机器上是1毫秒,而不是25.4micro秒。你知道吗

相关问题 更多 >