熊猫数据框扩展重置其状态

时间:2019-12-20 15:50:06

标签: python pandas

我正在使用自定义方法扩展熊猫数据框。

我想定义一个可以在所有后续调用中重用的类属性,直到我明确决定对其进行更改。 而是在第一次调用后重置有问题的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

1 个答案:

答案 0 :(得分:0)

您的add_ten()函数返回一个数据框。此新数据框已使用默认源'database'进行了初始化。
您需要像这样设置新数据框的来源:

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