Python 构造函数中的数据帧和设置字段的子类化

Python 构造函数中的数据帧和设置字段的子类化,python,pandas,dataframe,Python,Pandas,Dataframe,我正在努力。如果我在实例上设置一个字段,它就可以正常工作 import seaborn as sns import pandas as pd df = sns.load_dataset('iris') class Results(pd.DataFrame): def __init__(self, *args, **kwargs): # use the __init__ method from DataFrame to ensure # that we'r

我正在努力。如果我在实例上设置一个字段,它就可以正常工作

import seaborn as sns
import pandas as pd
df = sns.load_dataset('iris')

class Results(pd.DataFrame):
    def __init__(self, *args, **kwargs):
        # use the __init__ method from DataFrame to ensure
        # that we're inheriting the correct behavior
        super(Results, self).__init__(*args, **kwargs)

    @property
    def _constructor(self):
        return Results
    
result_object = Results(df)
result_object['scheme'] = 'not_default'
print(result_object.head(5))

>>>   sepal_length  sepal_width  petal_length  petal_width species       scheme
0           5.1          3.5           1.4          0.2  setosa  not_default
1           4.9          3.0           1.4          0.2  setosa  not_default
2           4.7          3.2           1.3          0.2  setosa  not_default
3           4.6          3.1           1.5          0.2  setosa  not_default
4           5.0          3.6           1.4          0.2  setosa  not_default
我不太了解引擎盖下的
\u构造函数
方法,因此无法解释为什么这样做不起作用

import seaborn as sns
import pandas as pd
df = sns.load_dataset('iris')

class Results(pd.DataFrame):
    def __init__(self, *args,scheme='default', **kwargs):
        # use the __init__ method from DataFrame to ensure
        # that we're inheriting the correct behavior
        super(Results, self).__init__(*args, **kwargs)
        self['scheme'] = scheme

    @property
    def _constructor(self):
        return Results

result_object = Results(df.copy(),scheme='not_default')
print(result_object.head(5))

>>>
# scheme is still 'default'
   sepal_length  sepal_width  petal_length  petal_width species   scheme
0           5.1          3.5           1.4          0.2  setosa  default
1           4.9          3.0           1.4          0.2  setosa  default
2           4.7          3.2           1.3          0.2  setosa  default
3           4.6          3.1           1.5          0.2  setosa  default
4           5.0          3.6           1.4          0.2  setosa  default
请注意,
scheme
字段仍然显示default


是否仍要在实例构造函数中设置字段?

您当前的版本将创建
方案
作为属性(如
.index
.columns
):

result\u object.scheme
#0不是默认值
#1非默认值
#           ...     
#148非违约
#149不违约
#名称:scheme,长度:150,数据类型:object
要使其成为正确的列,您可以在将传入的
数据发送到
super()
之前修改它:

类结果(pd.DataFrame):
定义初始化(self,data=None,*args,scheme='default',**kwargs):
#向传入数据添加列
如果isinstance(数据,pd.DataFrame):
数据['scheme']=scheme
super(结果,自).\uuuu init\uuuuu(数据=数据,*args,**kwargs)
@财产
def_构造函数(自身):
返回结果
df=sns.load_数据集('iris')
result\u object=Results(df.copy(),scheme='not\u default')
#萼片长度萼片宽度花瓣长度花瓣宽度物种方案
#0 5.1 3.5 1.4 0.2 setosa非默认值
#1 4.9 3.0 1.4 0.2 setosa非默认值
#2 4.7 3.2 1.3 0.2 setosa非默认值
#3 4.6 3.1 1.5 0.2 setosa非默认值
# ...         ...          ...           ...          ...     ...          ...