我正在使用自定义方法扩展熊猫数据框。
我想定义一个可以在所有后续调用中重用的类属性,直到我明确决定对其进行更改。 而是在第一次调用后重置有问题的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
。
答案 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