Изменения отображения списка в ячейке DataFrame

суть вопроса. У меня есть DataFrame, где в ячейках некоторых столбцов находятся списки. При отображении print(df), где df = DataFrame(...) соответствующие ячейки отображают список: [[object], [object], ...].

Я же хочу чтобы вместо отображения списка отображалось количество элементов списка, но в остальном это оставался тот же list. То есть чтобы при вводе print(df) соответствующие ячейки показывали 10, 11 и т.д., при этом я мог, например, обратиться к элементу списка df['*column*'][0][0].

Для этого я создаю собственный класс, унаследованный от list, в котором переопределены методы отображения:

class data_list(list):
        def __init__(self, *args) -> None:
            list.__init__(self, args)

        def __str__(self) -> str:
            return 'Number: %s' % len(self)
        
        def __repr__(self) -> str:
            return '%s' % len(self)

и передаю его при создании DataFrame'а:

d = {..., *column*: [data_list, data_list, ...], ...}
df = DataFrame(d)

Но тут происходит загадочная часть, которая и вызывает проблемы. Несмотря на то, что я передаю объекты data_list, таблица DataFrame все равно отображает их list методом! То есть команда print(df['*column*']) показывает на месте объекта [[object], [object], ...], а не 10.

Хочется отметить, что я самостоятельно пытался решить проблему и экспериментировал. Если сделать класс не с наследованием, а с содержанием:

class data_list:
        def __init__(self) -> None:
            self.li = []

        def __str__(self) -> str:
            return 'Number: %s' % len(self.li)
        
        def __repr__(self) -> str:
            return '%s' % len(self.li)

        def append(self, obj):
            self.li.append(obj)

, то все работает ожидаемо и print(df['*column*']) показывает 10 на месте объекта. Но это не вариант, потому что переопределять все остальные методы list'а нет никакого желания.

Соответственно вопрос: что это такое и как я должен унаследоваться от list'а так, чтобы DataFrame показывал __str__ методы дочернего класса?


Ответы (0 шт):