我正在尝试创建自己的Dataframe类。我希望在调用它时有一些特定的列。所以我这样做:
from pandas import DataFrame
class MyClass(DataFrame):
def __init__(self):
super(MyClass, self).__init__(columns=['Class','Conditions'])
但是,当我尝试向其添加数据时,
test = MyClass()
#test = MyClass(columns=['Class','Conditions'])
test.loc[2] = ['class2',[1, 2, 3]]
我得到一个错误:
文件“ C:\ Miniconda3 \ lib \ site-packages \ pandas \ core \ indexing.py”,行 189,在设置项目中 self._setitem_with_indexer(索引器,值)
文件“ C:\ Miniconda3 \ lib \ site-packages \ pandas \ core \ indexing.py”,行 451,在_setitem_with_indexer中 self.obj._data = self.obj.append(value)._ data
文件“ C:\ Miniconda3 \ lib \ site-packages \ pandas \ core \ frame.py”,行 附录6211 sort = sort)
文件 “ C:\ Miniconda3 \ lib \ site-packages \ pandas \ core \ reshape \ concat.py”,行 226,在concat 返回op.get_result()
文件 “ C:\ Miniconda3 \ lib \ site-packages \ pandas \ core \ reshape \ concat.py”,行 428,在get_result中 返回(cons._from_axes(new_data,self.new_axes)
文件“ C:\ Miniconda3 \ lib \ site-packages \ pandas \ core \ generic.py”,行 356,in _from_axes 返回cls(data,** kwargs)
TypeError: init ()接受1个位置参数,但给出了2个
我意识到,如果我没有在__init__
中声明这些列,并且在创建类之后就对其进行了分配,那么我没有问题。
但是,我想使用这些名称作为列来创建类。
非常感谢。
答案 0 :(得分:2)
如果要使用构造函数进行初始化,则必须将参数传递给父__init__
>>> class MyClass(DataFrame):
def __init__(self, *args, **kwargs):
kwargs['columns'] = ['Class', 'Conditions']
super(MyClass, self).__init__(*args, **kwargs)
>>> md = MyClass({'Class': [1, 2, 3]})
>>> md
Class Conditions
0 1 NaN
1 2 NaN
2 3 NaN