为什么我的python函数在类中的运行方式不同

2024-09-30 12:16:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在重新组织和清理我的代码,并将一组函数移动到一个类中。基本设置很好,因为其中一个函数工作正常,而其他函数则没有。代码在不在类中时按预期运行,因此我怀疑在处理.self时出现了错误。你知道吗

我已经一遍又一遍地通读了密码。用不同的方式重写,看看我是否把事情搞砸了。你知道吗

注意,如果pandas数据帧在class中处理不同的数据帧,那么我将使用它们。你知道吗

下面的代码示例。你知道吗

from pandas import DataFrame, read_csv

class clss(object):

    def __init__(self, x):
        self.x1 = x  # x is a pandas data frame
        self.stat = defaultdict(dict)


    def worker0(self, key, key0):
        # Change value at given coordinates 
        if key in self.stat and key0 in self.stat[key]:
            self.stat[key][key0] += 1
        else: 
            self.stat[key] = dict(key0=0)

    def worker1(self, key, key0)
        if key in self.stat and key0 in self.stat[key]:
            self.stat[key][key0] += 2
        else: 
            self.stat[key] = dict(key0=0)

    def master(self):

        for a in self.x1.index:
            if self.x1.loc[a, 'val'] == 1:
                self.worker0(a, foo)
            else:
                self.worker1(a, foo)
                self.worker0(a, blah)

        self.x1 = DataFrame(stat).T
        print(self.x1)


x = read_csv('file.csv')  #index = [0, 1, 2] 
c = clss(x)
c.master()

现在根据x的内容,我应该得到如下输出:

    foo     blah
0   4       1
1   10      4
2   1       30

相反,我得到:

    foo     blah
0   15      35
1   15      35
2   15      35

在我看来,错误的方法是所有正确划分的值的总和。然而,我不完全确定是否是这样,但它似乎有点真实。你知道吗

为了提供更多的上下文,我有一个带有事件列表的csvrows),每个事件中都有一些人。如果一个事件是一个特定的事件,那么在特定事件中为每个人更改dict中的相关值。你知道吗

编辑以改进示例并提供上下文


Tags: csvkey函数代码inselfpandasfoo

热门问题