如何将pandas中的列表列转换为Python中唯一值的稀疏数据帧
对于每个行id,我都有一个值列表作为一列。 结构如下:如何将pandas中的列表列转换为Python中唯一值的稀疏数据帧,python,pandas,list,dataframe,sparse-matrix,Python,Pandas,List,Dataframe,Sparse Matrix,对于每个行id,我都有一个值列表作为一列。 结构如下: 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 f
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~
身份证号码-60K~
如果缩短栏目名称会导致
内存减少,
但对我来说,从列表中解包到稀疏是最困难的部分
请提供帮助:与数据帧构造函数一起使用:
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
编辑:对于稀疏数据帧,将稀疏输出=True添加到MultiLabelBinarizer并使用
与数据帧构造函数一起使用:
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
编辑:对于稀疏数据帧,将稀疏输出=True添加到MultiLabelBinarizer并使用
df[0]指的是什么?@Talis-它是列名0,可能需要df['package']工作,但是,我可以在声明df时强制它稀疏吗?这里:df=pd.DataFramemlb.fit\u transformdf[0],columns=mlb.classes\uu,index=df。index@Talis-答案已编辑。df[0]指的是什么?@Talis-这是列名0,可能需要df['package']工作,但是,我可以在声明df时强制它稀疏吗?这里:df=pd.DataFramemlb.fit\u transformdf[0],columns=mlb.classes\ux,index=df。index@Talis-答案已编辑。