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非默认值
# ... ... ... ... ... ... ...