Python 有没有一种方法可以从类内的方法操纵全局数据帧?
我正在制作一个tkinter应用程序,在调用函数Python 有没有一种方法可以从类内的方法操纵全局数据帧?,python,dataframe,tkinter,Python,Dataframe,Tkinter,我正在制作一个tkinter应用程序,在调用函数Add_Task_Timing()时,它会在类Task的方法中创建一个临时数据帧。以下是代码的格式: # Makes a global dataframe Task_Dataframe = pd.DataFrame() Task_Dataframe.loc[0, 'Task_Name'] = [None] Task_Dataframe.loc[0, 'Start_Time'] = [None] Task_Dataframe.loc[0, 'End_
Add_Task_Timing()
时,它会在类Task
的方法中创建一个临时数据帧。以下是代码的格式:
# Makes a global dataframe
Task_Dataframe = pd.DataFrame()
Task_Dataframe.loc[0, 'Task_Name'] = [None]
Task_Dataframe.loc[0, 'Start_Time'] = [None]
Task_Dataframe.loc[0, 'End_Time'] = [None]
Task_Dataframe.loc[0, 'Duration'] = [None]
Task_Dataframe.loc[0, 'Team_Member'] = [None]
class Task():
def __init__(self,task_name, start_time, end_time):
# THIS METHOD CREATES ATTRIBUTES OF THE TASK
self.task_name = task_name
self.start_time = start_time
self.end_time = end_time
def Add_Task_Timing (self):
# THIS METHOD ADDS THE TASK TO THE DATAFRAME
# column_names = ["Task_Name", "Start_Time","End_Time","Duration", "Team_Member"]
temporary_df = pd.DataFrame()
temporary_df.loc[0, 'Task_Name'] = [task_name]
temporary_df.loc[0, 'Start_Time'] = [start_time]
temporary_df.loc[0, 'End_Time'] = [end_time]
temporary_df.loc[0, 'Duration'] = [end_time - start_time]
temporary_df.loc[0, 'Team_Member'] = [None]
print(temporary_df)
Task_Dataframe.join(temporary_df, lsuffix='_MAIN', rsuffix='_TEMP')
return Task_Dataframe
我唯一的问题是方法Add\u Task\u Timing()
内部的操作不会发生在全局数据帧Task\u dataframe
上。出于某种原因,返回方法Add\u Task\u Timing()
的输出显示:
Task_Name Start_Time End_Time Duration Team_Member
0 NaN NaN NaN NaN NaN
我知道由于某种原因,该方法没有更新为全局数据帧定义的值。我试过
concat()
,join()
,append()
。似乎没有人能做到这一点。我添加了以下几行:
global Task_Dataframe
Task_Dataframe = Task_Dataframe.join(temporary_df, lsuffix='_M', rsuffix='_T')
当临时\u df
为:
Task_Name Start_Time End_Time Duration Team_Member
0 tasking 23.0 43.0 20.0 NaN
Task_Name_Main Start_Time_Main End_Time_Main Duration_Main ... Start_Time_Temp End_Time_Temp Duration_Temp Team_Member_Temp
0 NaN NaN NaN NaN ... 43.0 23.0 20.0 NaN
temporary_df
的结果是:
Task_Name Start_Time End_Time Duration Team_Member
0 tasking 23.0 43.0 20.0 NaN
Task_Name_Main Start_Time_Main End_Time_Main Duration_Main ... Start_Time_Temp End_Time_Temp Duration_Temp Team_Member_Temp
0 NaN NaN NaN NaN ... 43.0 23.0 20.0 NaN
我仍在试图弄清楚为什么它不会更新全局数据框
Task\u dataframe
中的值,我认为您需要在Add\u Task\u Timing()
方法中预先添加self.
。i、 e.temporary\u-df.loc[0,'Task\u-Name']=[self.Task\u-Name]
,temporary\u-df.loc[0,'Start\u-Time']=[self.Start\u-Time]
,等等。您的代码应该会导致名称错误
异常。@martineau。我已经试过了。它仍然给出同样的回答。我尝试在方法Add\u Task\u Timing()
的全局数据框Task\u dataframe
中添加一列,它自己更新了。出于某种原因,它不响应将临时的
与Task\u Dataframe
@martineau连接,事实上,它的作用完全相反。仅当我从[self.task\u name]
中删除self.
前缀时,它才会保存数字。它与[task\u name]配合使用很好。在Add\u task\u Timing()
函数中,task\u name
未定义-因此我认为您弄错了(或者使用了与您的问题不同的代码)。