Pandas 如何从数据帧创建稀疏矩阵?

Pandas 如何从数据帧创建稀疏矩阵?,pandas,machine-learning,sparse-matrix,Pandas,Machine Learning,Sparse Matrix,假设数据帧中有稀疏数据。如何从中创建稀疏矩阵,以及在哪些模型中可以使用它进行预测?考虑数据帧df df = pd.DataFrame(np.zeros((10, 10))) df.iloc[5, 5] = 1 df 0 1 2 3 4 5 6 7 8 9 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0

假设数据帧中有稀疏数据。如何从中创建稀疏矩阵,以及在哪些模型中可以使用它进行预测?

考虑数据帧
df

df = pd.DataFrame(np.zeros((10, 10)))
df.iloc[5, 5] = 1

df

     0    1    2    3    4    5    6    7    8    9
0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
1  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
3  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
4  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
5  0.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0
6  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
7  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
8  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
9  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0

Memmory Usage: 880
您可以使用
将其变为稀疏(0)

第一个参数是假定为填充值的值

d1 = df.to_sparse(0)

d1

     0    1    2    3    4    5    6    7    8    9
0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
1  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
3  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
4  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
5  0.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0
6  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
7  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
8  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
9  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0

Memmory Usage: 88

内存占用是大小的十分之一。

此答案将使数据尽可能稀疏,并避免内存问题。csr_矩阵是一种标准稀疏矩阵格式,可与scipy和sklearn一起用于建模

import pandas as pd
from scipy import sparse
df = pd.DataFrame({'rowid':[1,2,3,4,5], 'val1':[1, 1, 0, 0, 0], 'val2':[1, 0, 0, 1, 0]})
print 'Input data frame\n{0}'.format(df)
print 'DataFrame to a sparse matrix'
df_as_sparse_matrix = sparse.csr_matrix(df.as_matrix())
print df_as_sparse_matrix.todense()

注意:
pd.DataFrame.to_sparse()
自0.25以来一直被弃用。