Изменение значений фрейма данных gloabal pandas на месте с помощью функции в классе с помощью кнопки tkinter

#python #pandas #tkinter

#python #pandas #tkinter

Вопрос:

У меня есть вызываемый класс mclass , который должен использоваться в качестве объекта tkinter в основной программе. Внутри этого класса у меня есть несколько кнопок tkinter, и одна из них должна иметь возможность редактировать фрейм данных pandas и вносить изменения на месте глобально.

Вот код, представляющая интерес функция self.save_data() , и предполагается, что фрейм данных pandas table_cat редактируется кнопкой self.saving . Я пробовал много разных вещей, но по какой-то причине изменения не будут происходить на месте в исходном фрейме данных.

 #some pandas dataframe with 10000 rows .. the column structure is given below
table_cat=pd.DataFrame(columns=['index','redshifted_freq','source_found','velocity_d','velocity_u'])
class mclass:
    def __init__(self,  window=None, mclass_df=None):
        self.saving = Button(window,text='Save',bg='red',command=self.save_data)
        self.saving.pack(side='bottom')
       

    def save_data (self):
        i=self.e4.get()
        self.data_frame.loc['source_found',i]=self.e.get()            # e-> tkinter button for 'source found'
        self.data_frame.loc['redshifted_freq',i]=float(self.e1.get()) # e1-> tkinter button for 'redshifted_frec' 
        self.data_frame.loc['velocity_d',i]=float(self.e2.get())      # e2-> tkinter button for 'velocity_d'
        self.data_frame.loc['velocity_u',i]=float(self.e3.get())      # e3-> tkinter button for 'velocity_u'
        global table_cat
        table_cat=self.data_frame
 

Ответ №1:

Эта строка table_cat=self.data_frame перезаписывает предыдущее содержимое вашего глобального фрейма данных, поэтому каждый раз, когда вы нажимаете эту кнопку, ваши предыдущие данные теряются.

На самом деле вам нужно добавить новые данные, например:

 table_cat = table_cat.append(self.data_frame)
 

Комментарии:

1. Но в том-то и дело, я хочу, чтобы это было перезаписано, я хочу, чтобы изменения произошли в ‘table_cat’… Но после назначения table_cat остается неизменным

2. Не могли бы вы затем поделиться остальной частью своего кода? Потому что нам нужно знать, где и как вы получаете доступ table_cat к данным