J'ai utilisé le
sklearn.preprocessing.OneHotEncoder
pour transformer certaines données, la sortie est scipy.sparse.csr.csr_matrix
comment puis-je le fusionner dans ma trame de données d'origine avec les autres colonnes?
J'ai essayé d'utiliser pd.concat
mais je reçois
TypeError: cannot concatenate a non-NDFrame object
Merci
Si A est csr_matrix
, Vous pouvez utiliser .toarray()
(il y a aussi .todense()
qui produit un numpy
matrix
, qui fonctionne également pour le constructeur DataFrame
):
df = pd.DataFrame(A.toarray())
Vous pouvez ensuite l'utiliser avec pd.concat()
.
A = csr_matrix([[1, 0, 2], [0, 3, 0]])
(0, 0) 1
(0, 2) 2
(1, 1) 3
<class 'scipy.sparse.csr.csr_matrix'>
pd.DataFrame(A.todense())
0 1 2
0 1 0 2
1 0 3 0
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 3 columns):
0 2 non-null int64
1 2 non-null int64
2 2 non-null int64
Dans la version 0.20, pandas
a introduit structures de données éparses , y compris SparseDataFrame
.
Vous pouvez également passer des matrices éparses à sklearn
pour éviter de manquer de mémoire lors de la reconversion en pandas
. Convertissez simplement vos autres données au format clairsemé en passant un numpy
array
au constructeur scipy.sparse.csr_matrix
Et utilisez scipy.sparse.hstack
Pour combiner (voir docs ).
Vous pouvez également éviter de récupérer une matrice clairsemée en définissant le paramètre sparse
sur False
lors de la création de l'encodeur.
La documentation de OneHotEncoder indique:
clairsemé: booléen, par défaut = True
Renvoie une matrice clairsemée si elle est définie sur Vrai, sinon renvoie un tableau.
Ensuite, vous pouvez à nouveau appeler le constructeur DataFrame pour transformer le tableau numpy en un DataFrame.