Python 熊猫数据帧扩展重置其状态

Python 熊猫数据帧扩展重置其状态,python,pandas,Python,Pandas,我正在使用自定义方法扩展pandas dataframe 我想定义一个类属性,在我明确决定更改它之前,它可以在所有后续调用中重用。 相反,在第一次调用后,将重置相关的class属性 这个可复制的例子解释了我面临的问题 import pandas as pd @pd.api.extensions.register_dataframe_accessor("extend") class FeatureAccessor: def __init__(self, pandas_obj, sourc

我正在使用自定义方法扩展pandas dataframe

我想定义一个类属性,在我明确决定更改它之前,它可以在所有后续调用中重用。 相反,在第一次调用后,将重置相关的class属性

这个可复制的例子解释了我面临的问题

import pandas as pd

@pd.api.extensions.register_dataframe_accessor("extend")
class FeatureAccessor:
    def __init__(self, pandas_obj, source = 'database'):
        self._obj = pandas_obj
        self.source = source

    def add_ten(self):
        return self._obj + 10

if __name__ == '__main__':
    df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
    print('The original source is', df.extend.source)
    df.extend.source = 'local'
    print('The new source is', df.extend.source)
    df = df.extend.add_ten()
    print('After manipulation, the source was reset to ' + df.extend.source + '. I want it to be local')

# The original source is database
# The new source is local
# After manipulation, the source was reset to database. I want it to be local
我希望
self.source
保持设置为
local

您的
add__ten()
函数返回一个新的数据帧。此新数据帧使用默认的源代码“数据库”进行初始化。
您需要如下设置此新数据帧的源:

def add_ten(self):
    temp = self._obj + 10
    temp.extend.source = self.source
    return temp
另一种可能性是就地添加:

def add_ten(self):
    self._obj.iloc[:,:] += 10
    return self._obj