Проблема в расчете для кнопки калькулятора

У меня возникает ошибка при запуске в калькаляторе рассчета из 4-х параметров одного ошибка следующего плана setting an array element with a sequence Код калькулятор представлен ниже рассчет производится с помощью модели полученной с помощью машинного обучения

import math

import pickle

import tkinter

from tkinter import *

import pandas as pd

import sklearn

from sklearn.ensemble import GradientBoostingRegressor

def solver():

filename = 'finalized_model_gradient_boosting.sav'

loaded_model_gb = pickle.load(open(filename, 'rb'))



res = loaded_model_gb.predict(df)

print(res)

#Поле очистки информации вывода

def clear(event):

caller =event.widget

caller.delete("0","end")

#Функция удаления информации из поля ввода

def delete():

a.delete(5,'end')

d.delete(5,'end')

b.delete(5,'end')

c.delete(5,'end')

f.delete(5,'end')

 #Функция вставки информации

 def inserter(value):

e.delete("0.0","end")

e.insert("0.0",value)

def handler():

try:

    calc_a_val =float(a.get())

    calc_d_val =float(d.get())

    calc_b_val =float(b.get())

    calc_c_val = float(c.get())

    calc_f_val =float(f.get())

    inserter(solver(calc_a_val,calc_d_val,calc_b_val,calc_c_val,calc_f_val))

    except ValueError:

             inserter('Данные не введены')

    root = Tk()

    root.title("E")

    root.geometry('840x440+300+200')



    root.resizable(False, False)





text_a = Label(root,text="A:")

text_b = Label(root,text="B:")

text_c = Label(root,text="C:")

text_d = Label(root,text="D:")

text_e = Label(root,text="E")

text_f = Label(root,text="f")

text_F = Label(root,text="F")

text_a.pack()





text_a.grid(row=0,column=0)

a = Entry(root,justify=tkinter.CENTER,font=('Arial',12))

a.bind("<FocusIn>",clear)



 a.grid(row=0,column=1)

 b = Entry(root,justify=tkinter.CENTER,font=('Arial',12))

 b.bind("<FocusIn>",clear)



  text_b.grid(row=1,column=0)

  b.grid(row=1,column=1)

  c = Entry(root,justify=tkinter.CENTER,font=('Arial',12))



 c.bind("<FocusIn>",clear)

 text_c.grid(row=2,column=0)

  c.grid(row=2,column=1)

  d = Entry(root,justify=tkinter.CENTER,font=('Arial',12))

  d.bind("<FocusIn>",clear)



  text_d.grid(row=3,column=0)

 d.grid(row=3,column=1)

#поле вывода

 e = Text(root,font=('Arial',12),width=15,height=5)

 text_e.grid(row=2,column=9)

 e.grid(row=2,column=10)

 f = Entry(root,justify=tkinter.CENTER,font=('Arial',12))

 f.bind("<FocusIn>",clear)

 f.grid(row=4,column=1)

 text_f.grid(row=4,column=0)

 text_F.grid(row=4,column=9)

 but = Button(root,text='Вычислить',command=solver).grid(row=12,column=12,padx=(10,0))

 root.grid_columnconfigure(0,minsize=120)

 root.grid_columnconfigure(2,minsize=60)

 root.grid_rowconfigure(0,minsize=60)

 root.grid_rowconfigure(1,minsize=60)

 root.grid_rowconfigure(2,minsize=60)

 root.grid_rowconfigure(3,minsize=60)

 root.grid_rowconfigure(4,minsize=60)



but = Button(root,text='Очистить',command=delete).grid(row=11,column=12,padx=(10,0))

data = {"A":[a], "B":[b],"C":[c],"D":[d]}

 df = pd.DataFrame(data)

 print(df)

 root.mainloop()

Это основная часть кода сверху а вот выдает такую ошибку. У меня сделано визуализация калькулятора следующего плана где нужно делать расчет параметра зная другие 4 , так как для выполнения расчетов используется модель, которая считалась с помощью машинного обучения вот такая ошибка выводится:

TypeError: float() argument must be a string or a number, not 'Entry'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):

  File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 1892, in __call__

    return self.func(*args)

  File "<ipython-input-6-2ed72ab92efd>", line 13, in solver

    res = loaded_model_gb.predict(df)

  File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\ensemble\_gb.py", line 1650, in predict

    X = check_array(X, dtype=DTYPE, order="C", accept_sparse='csr')

  File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py", line 63, in inner_f

    return f(*args, **kwargs)

  File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py", line 616, in check_array

    array = np.asarray(array, order=order, dtype=dtype)

  File "C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\_asarray.py", line 102, in asarray

    return array(a, dtype, copy=False, order=order)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py", line 1899, in __array__

    return np.asarray(self._values, dtype=dtype)

  File "C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\_asarray.py", line 102, in asarray

    return array(a, dtype, copy=False, order=order)

ValueError: setting an array element with a sequence.

Как исправить ошибку, чтобы можно было вводить данные в калькуляторе и происходил расчет параметра?

Исправил как сказали в ответе:

   data = {
   "A":[float(a.get())],
   "B":[float(b.get())],
   "C":[float(c.get())],
   "D":[float(d.get())]

Далее стало выдовать ошибку, что не может преобразовать string во float could not convert string to float: ''


Ответы (1 шт):

Автор решения: gil9red

Думаю проблема тут:

data = {"A":[a], "B":[b],"C":[c],"D":[d]}
df = pd.DataFrame(data)

В словаре есть переменные, типа a, что содержат ссылки на tk.Entry, а pandas умеет работать с базовыми типами, это объясняет ошибку:

TypeError: float() argument must be a string or a number, not 'Entry'

Думаю, если вы возьмете значения из переменных, то проблема будет решена:

data = {
    "A": [float(a.get())], 
    "B": [float(b.get())],
    "C": [float(c.get())],
    "D": [float(d.get())]
}
→ Ссылка