python / pandas - MultiIndexing - 消除全局变量的使用

python / pandas - MultiIndexing - eliminate the use of global variables

我正在使用 pandas 从 excel 导入数据框,以便对数据进行排序、更改和 运行 一些简单的加法和除法。

我的代码可以正常工作,但它始终包含全局变量。我认为这是不好的做法,我想以某种方式消除这些全局变量,但我对如何去做感到困惑。

我不确定如何在不声明全局变量的情况下通过索引和切片进一步修改我的数据框。

mydf = pd.read_excel('data.xlsx')

new_indexes = df.set_index(['apple', 'cherry', 'banana'])

new_indexes['apples and cherries'] = new_indexes['apple'] + new_indexes['cherries']

sliced = multi.loc(axis = 0)[pd.IndexSlice[:, 'fruits']]

total_fruits = sliced.loc[:, 'grapes', 'watermelon', 'orange'].sum(axis=1)

那是我的代码片段。如您所见,我指的是全局变量以进一步修改我的数据框。我需要消除全局变量。我正在尝试创建函数来帮助清理我的代码。

我的主要问题是如何在不为我的代码分配全局变量的情况下引用我的数据和更改?

如果我想定义一个 class 并将变量重新分配给属性,我可以这样做吗?

class MyDf:

    def __init__(self):
        pass

    def get_df(self):
        return pd.read_excel('data.xlsx')
    
    def set_index(self):
        self._multi_index = df.set_index(['apple', 'cherry', 'banana']) 

    def add_totals(self)
        self.set_indexes['apples and cherries'] = set_indexes['apple']+ new_indexes['cherries']

 

谢谢

您可以做几件事,具体取决于您的代码的整体结构和您的目标。在不了解您的案例的更多信息的情况下,例如,查看您提供的代码片段如何嵌入到您的其余代码中,这些只是可能的解决方案。

您可以定义一个函数,让它以数据帧作为参数,对其执行操作,然后return修改后的数据帧。该函数也可以简单地将文件名作为参数,以便在函数中创建相应的 df 作为开头。如果您不需要在代码后面引用 new_indexessliced 等中间变量,使用函数来执行操作 可能 是一个好方法去。

您还可以定义一个 Class,将变量设为该 class 对象的属性,并编写方法来执行您想要的相应操作去做。这样做的好处是,如有必要,您仍然可以访问您的变量。