使用python将数组1D和2D的元组转换为数据框

时间:2019-06-22 00:52:05

标签: python tuples

这是model.predic返回的内容。 ¿如何在数据框的列中转换此元组?

(array([1., 1., 1., ..., 1., 1., 1.]), array([[0.46502338, 0.53497662],
        [0.47072865, 0.52927135],
        [0.4696557 , 0.5303443 ],
        ...,
        [0.47139825, 0.52860175],
        [0.46367829, 0.53632171],
        [0.46586898, 0.53413102]]))
<class 'tuple'>

这些都不对我有用

pd.DataFrame(dict(class_pred=tuple[0], prob_0=tuple[1], prob_1=tuple[2]))
pd.DataFrame(np.column_stack(tuple),columns=['class_pred','prob_0','prob_1'])

我想获得这样的东西:

class_pred  prob_0    prob_1
1           0.470728  0.5292713

AniSkywalker解决方案完美运行。

type(data)
print(data)

tuple
(array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]),
 array([[0.46502338, 0.53497662],
        [0.47072865, 0.52927135],
        [0.4696557 , 0.5303443 ],
        [0.46511921, 0.53488079],
        [0.46739934, 0.53260066],
        [0.47387646, 0.52612354],
        [0.4737461 , 0.5262539 ],
        [0.47052631, 0.52947369],
        [0.47658316, 0.52341684],
        [0.47222654, 0.52777346]]))
df_pred = pd.DataFrame(data=dict(pred=data[0], prob_0=data[1][:,0], prob_1=data[1][:,1]))
print(df_pred)

    pred    prob_0      prob_1
0   1.0     0.465023    0.534977
1   1.0     0.470729    0.529271
2   1.0     0.469656    0.530344
3   1.0     0.465119    0.534881
4   1.0     0.467399    0.532601
5   1.0     0.473876    0.526124
6   1.0     0.473746    0.526254
7   1.0     0.470526    0.529474
8   1.0     0.476583    0.523417
9   1.0     0.472227    0.527773

1 个答案:

答案 0 :(得分:1)

我假设您的数据的格式为((n), (n, 2)),因此:

import numpy as np
n = 5
data = (np.random.rand(n), np.random.rand(n, 2))

为您的输出提供合理的估计。

假设data是:

(array([0.27856312, 0.66255123, 0.47976175, 0.59381106, 0.82096555]), array([[0.53719357, 0.55803381],
       [0.5749893 , 0.09712089],
       [0.91607789, 0.21579499],
       [0.50163898, 0.39188127],
       [0.60427654, 0.07801227]]))

您的dict方法实际上可以进行以下修改:

import pandas as pd
df = pd.DataFrame(data=dict(class_pred=data[0], prob_0=data[1][:,0], prob_1=data[1][:,1]))

请注意,prob_0prob_1都是从第二个元组元素派生的,但是使用Numpy的列索引,我们可以按照您的描述拆分单个数组。

让我们以data[1][:,0]为例:首先,我们选择data元组的第二个元素,即(n, 2)矩阵。然后,我们从所有行(0)中选择第一列(:)。结果是该矩阵中每一行的第一个元素的向量。

使用我的虚构号码,df.head()应该给您:

   class_pred    prob_0    prob_1
0    0.278563  0.537194  0.558034
1    0.662551  0.574989  0.097121
2    0.479762  0.916078  0.215795
3    0.593811  0.501639  0.391881
4    0.820966  0.604277  0.078012