如何将for循环中的函数生成的结果存储到Python中的数据帧?

如何将for循环中的函数生成的结果存储到Python中的数据帧?,python,pandas,numpy,dataframe,for-loop,Python,Pandas,Numpy,Dataframe,For Loop,我想存储我创建的名为surface_coverage的函数的生成结果。该函数以numpy.ndarray形式返回结果,我试图将其存储到数据帧中,但不断收到错误消息“必须传递二维输入” 这是我的密码 T = [400,500,600,700] result = [] for t in df_G['Temperature']: for i in T: columns = f'G_ads_{i}' G_CO2 = df.loc[df.Metal_Oxides

我想存储我创建的名为surface_coverage的函数的生成结果。该函数以numpy.ndarray形式返回结果,我试图将其存储到数据帧中,但不断收到错误消息“必须传递二维输入” 这是我的密码

T = [400,500,600,700]
result = []
for t in  df_G['Temperature']:
    for i in T:

        columns = f'G_ads_{i}'
        G_CO2 = df.loc[df.Metal_Oxides == "Al2O3"].loc[df.Adsorbates == 'CO2'][columns].min()
        G_H2O = df.loc[df.Metal_Oxides == "Al2O3"].loc[df.Adsorbates == 'H2O'][columns].min()
        G_O2 = df.loc[df.Metal_Oxides == "Al2O3"].loc[df.Adsorbates == 'O2'][columns].min()
        if t == i+273.15:
            theta = surface_coverage(t,P,G_CO2,G_H2O,G_O2,x_co2,x_h2o,x_o2)
            result.append(theta)
new_data = pd.DataFrame(result)
以下是输出:

[array([[8.53931326e-04],
       [9.34890812e-15],
       [9.99146054e-01],
       [1.46447007e-08]]), array([[1.07403011e-01],
       [4.44545478e-13],
       [8.92596825e-01],
       [1.64041799e-07]]), array([[8.52759436e-01],
       [1.52248154e-12],
       [1.47240375e-01],
       [1.88472871e-07]]), array([[9.92480337e-01],
       [8.43223552e-13],
       [7.51961814e-03],
       [4.46422474e-08]]), array([[9.99428328e-01],
       [4.36060531e-13],
       [5.71659951e-04],
       [1.17418613e-08]]), array([[9.99935140e-01],
       [2.38117323e-13],
       [6.48560836e-05],
       [3.70506323e-09]])]
是否有任何方法将numpy.bdarray转换为float?
谢谢你的时间和帮助

我认为这里的问题是,您的输出数组嵌套的方式看起来是3D而不是2D,这正是pandas DataFrame所寻找的

它看起来像θ,曲面覆盖函数的输出,是一个矩阵。虽然您可能会将它解释为一个由4个数字组成的列表,一个向量,但它看起来像是一个矩阵1行x 4列,我们可以通过计算括号来看到

array([[8.53931326e-04],
   [9.34890812e-15],
   [9.99146054e-01],
   [1.46447007e-08]])
您可能希望此数组类似于以下注释括号:

array([8.53931326e-04,
   9.34890812e-15,
   9.99146054e-01,
   1.46447007e-08])
要解决此问题,您应该能够替换

result.append(theta)


这样就可以将它们转换为数组。因此,您的结果将只是一个数组列表,它应该正确地将其标识为2D。

Yay!成功了。非常感谢:D我正在学习python和pandas来分析我的实验结果。我在这个问题上工作了一段时间,没有找到解决方案。曲面覆盖函数是np.linalg.solve的结果。我希望它返回数组列表,但我不知道如何返回。谢谢你的时间!!
result.append(theta.flatten())