scipy 用元组将数据集转换成矩阵

fafcakar  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(123)

我需要转换部分数据,使其与此解决方案兼容: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

如何生成兼容矩阵?

u4dcyp6a

u4dcyp6a1#

试试看:

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]]

资料来源:
How to form tuple column from two columns in Pandas
Convert pandas dataframe to NumPy array

wz8daaqr

wz8daaqr2#

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

>>> 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)
qv7cva1a

qv7cva1a3#

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

In [87]: from scipy import sparse

可以从 Dataframe 的列派生的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

这个M.shape是从数组的最大值导出的;实际上,您可能希望指定更大的形状。
M.toarray()从这个创建了一个numpy数组,但是使用那个形状,它将太大而无法显示。
我不确定 Dataframe 是如何从这样一个矩阵中导出的。

相关问题