В таблице Python модуля Pandas получаю некорректный вывод столбца
Реализую две функции: основную dichotomy_ с расчетами и декоратор print_dichotomy с выводом этих расчетов на печать.
В декораторе объявляю переменную result_table, куда свожу данные расчета. При этом датафрейм при выводе "расползается" по колонкам (можно выполнить код, чтобы увидеть) и столбец Значения функции дает NaN, сваливая все значения, которые не NaN, в одну строку.
Заметил, что на это влияет строка func = ', '.join(map(lambda x: f'{f(x):.10f}', res)). Если ее убрать и выводить только столбцы Корни и Точность расчета, то расползания нет. При этом если переменную res реализовать как в исходном коде реализована переменная func, то также имеем NaN и вывод всех корней в одной строке.
Как обиться, чтобы датафрейм выводился с тремя столбцами без расползаний и значений NaN?
Код:
import numpy as np
import pandas as pd
def print_dichotomy(funcs):
def wrapper(a,b, n, eps_func, eps_arg):
*res, func, eps_list = list(funcs(a,b, n, eps_func, eps_arg))
func = ', '.join(map(lambda x: f'{f(x):.10f}', res))
result_table = pd.DataFrame()
result_table['Корни'] = pd.Series(res)
result_table['Значения функции'] = pd.Series(func)
result_table['Точность расчета'] = pd.Series(eps_list)
print('Значения функции составляют:\n', func)
print('Точность расчета: ', eps_list)
print(result_table)
return wrapper
def f(x):
return 1.2-np.log(x)-4*np.cos(2*x)
@print_dichotomy
def dichotomy_(a, b, n, eps_func, eps_arg):
eps_list = []
grid = np.linspace(a, b, n)
for x, y in zip(grid, grid[1:]):
mid = (y + x) / 2
root = mid
eps = (y-x) / 2
eps_list.append(eps)
if root:
yield root
yield eps_list
dichotomy_(0.0001, 50, 100, 0.000001, 0.000001)