Se A è csr_matrix
, è possibile utilizzare .toarray()
(c'è anche .todense()
che produce un numpy
matrix
, che è anche lavora per il DataFrame
costruttore):
df = pd.DataFrame(A.toarray())
Si c a quindi utilizzare questo con 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
Nella versione 0.20, pandas
introdotto sparse data structures, compreso il SparseDataFrame
.
In alternativa, è possibile passare le matrici sparse a sklearn
per evitare l'esaurimento della memoria durante la riconversione allo pandas
. Basta convertire gli altri dati nel formato sparse passando un numpy
al costruttore scipy.sparse.csr_matrix
e utilizzare scipy.sparse.hstack
da combinare (vedere docs).
Cosa posso fare se il mio A.toarray() conduce a un MemoryError? C'è un modo per creare il Dataframe senza convertirlo in un narray? – user77005
Puoi dare un'occhiata ai panda [sparse data structures] (https://pandas.pydata.org/pandas-docs/stable/sparse.html) – Stefan