数据集通过元组转换为矩阵



我需要转换一部分数据,使其与此解决方案兼容:https://stackoverflow.com/a/64854873

数据为pandas.core.frame.DataFrame,带有:

result  data_1  data_2
1    1.523     4        1223
3    1.33     84        1534

某些索引值可能会被删除,因此1、3、。。。

它应该是一个包含数据值和结果的元组。溶液中的类型为scipy.sparse._coo.coo_matrix,如:

(4, 1223) 1.523
(84, 1534) 1.33

只有scipy.sparse.coo_matrix(df.values)似乎混淆了数据。

(0, 0)    1.523
(0, 1)    1.53
(0, 24)   1.92
: :
(2, 151)  123.0
(2, 142)  834.0

如何生成兼容矩阵?

试试这个:

df['tuple'] = list(zip(df.data_1, df.data_2))
result = df[['tuple', 'result']].to_numpy()
print(result)

结果:

[[(4, 1223) 1.523]
[(84, 1534) 1.33]]

来源:
如何从Pandas中的两列组成元组列
将Pandas数据帧转换为NumPy数组

您可以过滤掉数据列,然后在axis=1上应用tuple,这将从行值中创建元组,我将其分配为一个新列,因为您提到的输出不清楚是数组还是数据帧,但我认为您应该能够继续处理所需的剩余结果。

>>> df.assign(data=df.filter(like='data').apply(tuple, axis=1))
result  data_1  data_2        data
1   1.523       4    1223   (4, 1223)
3   1.330      84    1534  (84, 1534)

您可以使用重新创建稀疏矩阵(而不仅仅是复制其显示(

In [87]: from scipy import sparse

可以从数据帧的列派生的3个数组:

In [88]: data = np.array([1.523, 1.33])    
In [89]: row = np.array([4,84])    
In [90]: col = np.array([1223, 1534])

实际矩阵:

In [91]: M = sparse.coo_matrix((data,(row, col)))

repr显示器:

In [92]: M
Out[92]: 
<85x1535 sparse matrix of type '<class 'numpy.float64'>'
with 2 stored elements in COOrdinate format>

及其str显示器:

In [93]: print(M)
(4, 1223) 1.523
(84, 1534)    1.33

该CCD_ 8是从阵列的最大值导出的;在实践中,您可能希望指定更大的形状。

M.toarray()从中创建了一个numpy数组,但如果使用该形状,它将太大而无法显示。

我不确定数据帧是如何从这样一个矩阵中派生出来的。

最新更新