如何将熊猫中的一列列表转换为Python中唯一值的稀疏DataFrame [重复]
Posted
技术标签:
【中文标题】如何将熊猫中的一列列表转换为Python中唯一值的稀疏DataFrame [重复]【英文标题】:How to turn a column of lists in pandas to a sparse DataFrame of the unique values in Python [duplicate] 【发布时间】:2020-04-02 08:03:57 【问题描述】:对于每一行 id,我都有一个作为 pandas 列的值列表。 结构如下:
df = 'id1':[['a','b','c','d']],'id2':[['a','d','e','j']],'id3':[['b','d','i','q']],
df = pd.DataFrame.from_dict(df,orient='index')
这给了我:
起初,我使用以下代码在旁边创建了一组唯一值:
l = df.values.tolist()
flat_set = item for sublist in l for item in sublist
最后,我需要得到一个稀疏版本:
注意事项:
-
没有。集合中的唯一值 - 100K~
没有。 ids - 60K~
如果缩短列的名称会导致 减少记忆, 但对我来说,从列表中解包到稀疏是困难的部分。
请帮忙:)
【问题讨论】:
【参考方案1】:将MultiLabelBinarizer
与DataFrame
构造函数一起使用:
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
df = pd.DataFrame(mlb.fit_transform(df[0]),columns=mlb.classes_, index=df.index)
print (df)
a b c d e i j q
id1 1 1 1 1 0 0 0 0
id2 1 0 0 1 1 0 1 0
id3 0 1 0 1 0 1 0 1
编辑:对于稀疏 DataFrame,将 sparse_output=True
添加到 MultiLabelBinarizer
并使用 DataFrame.sparse.from_spmatrix
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer(sparse_output=True)
a = mlb.fit_transform(df[0])
df = df = pd.DataFrame.sparse.from_spmatrix(a, columns=mlb.classes_, index=df.index)
print (df)
a b c d e i j q
id1 1 1 1 1 0 0 0 0
id2 1 0 0 1 1 0 1 0
id3 0 1 0 1 0 1 0 1
print (df.dtypes)
a Sparse[int32, 0]
b Sparse[int32, 0]
c Sparse[int32, 0]
d Sparse[int32, 0]
e Sparse[int32, 0]
i Sparse[int32, 0]
j Sparse[int32, 0]
q Sparse[int32, 0]
dtype: object
【讨论】:
df[0] 指的是什么? @Talis - 列名0
,可能需要df['package']
工作了,但是,我可以在声明 df 时强制它稀疏吗?在这里: df = pd.DataFrame(mlb.fit_transform(df[0]),columns=mlb.classes_, index= df.index)
@Talis - 答案已编辑。以上是关于如何将熊猫中的一列列表转换为Python中唯一值的稀疏DataFrame [重复]的主要内容,如果未能解决你的问题,请参考以下文章