Атрибут loc
является одним из нескольких индексаторов, см. Модуль pandas.core.indexing
, в частности функцию get_indexers_list()
:
# the supported indexers
def get_indexers_list():
return [
('ix', _IXIndexer),
('iloc', _iLocIndexer),
('loc', _LocIndexer),
('at', _AtIndexer),
('iat', _iAtIndexer),
]
Каждыйиз этих классов определяется в том же модуле.
Эта функция используется для добавления атрибутов в NDFrame
class , который является базовым классом pandas.DataFrame
.Каждый из классов в результате get_indexers_list()
добавляется как property
объект .
Таким образом, чтобы повторно использовать тип объекта, вы можете добавить свои свойства, используя тот же кодесли необходимо;добавьте тот же метод класса к вашему классу
@classmethod
def _create_indexer(cls, name, indexer):
"""Create an indexer like _name in the class."""
if getattr(cls, name, None) is None:
_indexer = functools.partial(indexer, name)
setattr(cls, name, property(_indexer, doc=indexer.__doc__))
, затем добавьте индексаторы с
# install the indexes
for _name, _indexer in indexing.get_indexers_list():
DataFrameCollection._create_indexer(_name, _indexer)
Учитывая dfcollection
экземпляр вашего DataFrameCollection
класса, тогда dfcollection.loc
приведет кв _LocIndexer('loc', dfcollection)
вызове и возврате.
Изучите оставшийся код в pandas.core.indexing
, чтобы увидеть, как каждый индексатор ожидает найти информацию о вашем экземпляре DataFrameCollection
;это ссылка self.obj
в методах индексатора.
Например, dfcollection.loc[...]
переводится в _LocationIndexer.__getitem__()
, что делегирует _LocIndexer._is_scalar_access()
, _LocIndexer._getitem_scalar()
, _NDFrameIndexer._getitem_tuple()
и _LocIndexer._getitem_axis()
, которым вместе с методами, на которые эти делегаты делегированы, требуется доступ к , по крайней мере the .axes
, .ndim
._get_value()
, ._get_axis_name()
, ._get_axis_number()
, ._get_axis()
, ._reindex_with_indexers()
и ._take()
атрибуты и методы в кадре данных.