【问题标题】:How to store generate result from a function inside a for loop to DataFrame in Python?如何将for循环内函数的生成结果存储到Python中的DataFrame?
【发布时间】:2020-06-19 01:43:52
【问题描述】:

我想存储我创建的名为“surface_coverage”的函数的生成结果。该函数以 numpy.ndarray 形式返回结果,我尝试将其存储到数据框中,但我不断收到错误消息“必须通过 2-d 输入” 这是我的代码

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 吗? 感谢您的宝贵时间和帮助!

【问题讨论】:

    标签: python pandas numpy dataframe for-loop


    【解决方案1】:

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

    看起来你的surface_coverage函数的输出theta是一个矩阵。虽然您可能将其解释为 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)
    

    result.append(theta.flatten())
    

    这会将它们变成数组。因此,您的结果将只是一个应正确识别为 2D 的数组列表。

    【讨论】:

    • 耶!有效。非常感谢:D 我正在学习 python 和 pandas 来分析我的实验室结果。我一直在研究这个问题一段时间,但找不到解决方案。 surface_coverage 函数是 np.linalg.solve 的结果。我希望它返回一个数组列表,但我不知道如何。感谢您的时间!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多