Изменения отображения списка в ячейке 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__ методы дочернего класса?