Python 有没有一种方法可以从类内的方法操纵全局数据帧?

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_

我正在制作一个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_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
未定义-因此我认为您弄错了(或者使用了与您的问题不同的代码)。