Nếu A là csr_matrix
, bạn có thể sử dụng .toarray()
(có cũng .todense()
đó tạo ra một numpy
matrix
, cũng là làm việc cho DataFrame
hàm tạo):
df = pd.DataFrame(A.toarray())
Bạn c sau đó sử dụng điều này với 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
Trong phiên bản 0.20, pandas
giới thiệu sparse data structures, bao gồm SparseDataFrame
.
Hoặc, bạn có thể chuyển ma trận thưa thớt đến sklearn
để tránh hết bộ nhớ khi chuyển đổi về pandas
. Chỉ cần chuyển đổi dữ liệu khác của bạn thành định dạng thưa thớt bằng cách chuyển một số numpy
array
tới hàm tạo scipy.sparse.csr_matrix
và sử dụng scipy.sparse.hstack
để kết hợp (xem docs).
Tôi có thể làm gì nếu A.toarray() của tôi dẫn đến một MemoryError? Có cách nào để tạo Dataframe mà không chuyển đổi nó trở lại một ndarray không? – user77005
Bạn có thể muốn xem gấu trúc [cấu trúc dữ liệu thưa thớt] (https://pandas.pydata.org/pandas-docs/stable/sparse.html) – Stefan