我正在尝试创建我自己的 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]]
我收到错误:
File "C:\Miniconda3\lib\site-packages\pandas\core\indexing.py", line 189, in setitem self._setitem_with_indexer(indexer, value)
File "C:\Miniconda3\lib\site-packages\pandas\core\indexing.py", line 451, in _setitem_with_indexer self.obj._data = self.obj.append(value)._data
File "C:\Miniconda3\lib\site-packages\pandas\core\frame.py", line 6211, in append sort=sort)
File "C:\Miniconda3\lib\site-packages\pandas\core\reshape\concat.py", line 226, in concat return op.get_result()
File "C:\Miniconda3\lib\site-packages\pandas\core\reshape\concat.py", line 428, in get_result return (cons._from_axes(new_data, self.new_axes)
File "C:\Miniconda3\lib\site-packages\pandas\core\generic.py", line 356, in _from_axes return cls(data, **kwargs)
TypeError: init() takes 1 positional argument but 2 were given
我意识到,如果我不在 __init__
中声明列并在创建类后分配它们,我就没有问题。
但是,我希望使用这些名称作为列来创建类。
非常感谢。
最佳答案
如果要使用构造函数进行初始化,则必须将参数传递给父级__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
关于python - 使用特定列对数据框进行子类化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53449246/