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