создание подклассов данных с конкретными столбцами - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь создать свой собственный класс 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, в setitem self._setitem_with_indexer (индексатор, значение)

Файл" C: \Miniconda3 \ lib \ site-packages \ pandas \ core \ indexing.py ", строка 451, в _setitem_with_indexer self.obj._data = self.obj.append (значение) ._ 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 return (cons._from_axes (new_data, self.new_axes)

Файл "C: \ Miniconda3 \ lib \ site-packages \ pandas \ core \ generic.py", строка 356, в _from_axes возвращает cls (данные), ** kwargs)

Ошибка типа: init () занимает 1 позиционный арно было дано 2

Я понял, что если я не объявлю столбцы в __init__ и назначу их после создания класса, у меня нет проблем.

Однако я хотел бы, чтобы класс создавался с этими именами в виде столбцов.

Большое спасибо.

1 Ответ

0 голосов
/ 23 ноября 2018

Если вы хотите использовать конструктор для инициализации, вы должны передать аргументы родителю __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
...