我们可以将
scipy.sparse.coo_array
转换为
pandas.DataFrame
。
实用函数:
from scipy.sparse import coo_array
import pandas as pd
def coo_to_dataframe(array: coo_array) -> pd.DataFrame:
"""Convert scipy COO sparse array to a pandas data frame."""
labels = array.data
columns = array.col
rows = array.row
data_frame = pd.DataFrame({"x": columns, "y": rows, "label": labels})
return data_frame
创建一个稀疏数组(借用自@hpaulj):
sparse_array = coo_array(([.5, .4, .6], ([0 , 1, 2], [0, 5, 3])), shape=(5, 7))
对于一个小的示例数组,我们可以将其视为密集数组:
sparse_array.toarray()
array([[0.5, 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0.4, 0. ],
[0. , 0. , 0. , 0.6, 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0. , 0. ]])
最后,我们将稀疏数组转换为DataFrame并绘制出来。
dataframe = coo_to_dataframe(sparse_array)
dataframe.plot.scatter("x", "y", title="Sparse labels")
![Sparse labels plot](https://istack.dev59.com/9mViF.webp)
csr
格式与密集数组一样支持索引(虽然速度不够快)。coo
格式则不支持。对于整行,您可能希望执行M1 = M.tocsr(); row = M1[i,:].A
(toarray()
),假设该函数需要一个密集数组。 - hpaulj