我需要转换一部分数据,使其与此解决方案兼容: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数组,但如果使用该形状,它将太大而无法显示。
我不确定数据帧是如何从这样一个矩阵中派生出来的。