从 Pandas DataFrame 中删除列表
Removal of List from Pandas DataFrame
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() 片段。
type(data.Vector[0])
是 list
我需要对此向量化数据使用 KMeans 聚类,但列表不允许。
data.Vector.shape
是179
,data.Vector[0].shape
是8868
。
如何删除该列表,或者如果不能,那么如何使用它来对给定数据进行聚类?也许我可以通过以下方式开始获取数据框,然后在其上添加 运行 PCA。
预期输出如下所示:
您似乎想要做的是从包含数字列表的 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 微 秒。
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() 片段。
type(data.Vector[0])
是 list
我需要对此向量化数据使用 KMeans 聚类,但列表不允许。
data.Vector.shape
是179
,data.Vector[0].shape
是8868
。
如何删除该列表,或者如果不能,那么如何使用它来对给定数据进行聚类?也许我可以通过以下方式开始获取数据框,然后在其上添加 运行 PCA。
预期输出如下所示:
您似乎想要做的是从包含数字列表的 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 微 秒。