Как сохранить сгенерированный результат из функции внутри для l oop в DataFrame в Python? - PullRequest
0 голосов
/ 19 июня 2020

Я хотел бы сохранить сгенерированные результаты созданной мной функции под названием «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? Спасибо за ваше время и вашу помощь!

1 Ответ

1 голос
/ 19 июня 2020

Я думаю, проблема здесь в том, что ваш выходной массив вложен таким образом, чтобы он выглядел 3D, а не 2D, что и ищет pandas DataFrame.

Похоже, тета, вывод вашей функции surface_coverage, является матрицей. Хотя вы могли бы интерпретировать его как список из 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...