Hej, J'essaye de vectoriser des objets qui peuvent appartenir à plusieurs catégories et les mettre dans un cadre de données pandas. J'ai déjà trouvé une solution mais c'est très lent. Alors, voici ce que je fais:Vectorisation de données multi-catégories avec des pandas
Voilà comment mes données ressemble à:
data = {
'A':['c1','c2','c3'],
'B':['c4','c5','c2'],
'C':['c2','c1','c4']
}
J'ai trois articles (A-C) qui appartiennent à cinq catégories différentes (C1-C5).
donc créer un un dataframe vide, itérer sur les points qui les transforment en objets de la série booléennes avec l'index droit et les ajouter:
df = pd.SparseDataFrame()
for k, v in data.items():
s = pd.Series(np.ones_like(v, dtype=bool), index=v, name=k)
df = df.append(s)
Mon résultat ressemble à ceci:
Je suis content de ce résultat mais mes vraies données ont ~ 200k catégories ce qui rend cette approche terriblement lente. Avez-vous des suggestions pour accélérer?
Remarque: toutes les catégories et extraction les faisant passer sous forme de colonnes dans le vide dataframe ne vous aide pas:
df = pd.SparseDataFrame(columns=all_categories)
Cette idée a l'air géniale, j'ai aussi pensé à rejoindre les catégories et à utiliser un sklearn Vectorizer. Malheureusement, je suis confronté à une erreur étrange lors du passage de la matrice csr adaptée au constructeur SparseDataFrame: Fichier "/home/user/anaconda3/lib/python3.6/site-packages/pandas/sparse/frame.py", ligne 125, dans __init__ generic.NDFrame.__init __ (self, mgr) UnboundLocalError: la variable locale 'mgr' référencée avant l'affectation – nadre
@nadre, désolé, j'ai oublié de mentionner que le constructeur 'pd.SparseDataFrame (sparse_array)' a été ajouté dans Pandas v. 0.20, donc ça devrait fonctionner pour Pandas 0.20+ versions – MaxU
@nadre, si vous ne pouvez pas mettre à jour votre version de Pandas, vous pouvez utiliser [l'approche suivante] (https://stackoverflow.com/questions/41916560/pandas-dataframe-memory-python/41916672#41916672 – MaxU