Python 熊猫数据帧扩展重置其状态
我正在使用自定义方法扩展pandas dataframe 我想定义一个类属性,在我明确决定更改它之前,它可以在所有后续调用中重用。 相反,在第一次调用后,将重置相关的class属性 这个可复制的例子解释了我面临的问题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
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