Pandas: Как работать с _iLocIndexer?

>>> import pandas as pd
>>> pd.__version__
'0.16.1'
>>> s1 = pd.Series([1, 3, 5], index=list('abc'))
>>> s1.iloc(0)
<pandas.core.indexing._iLocIndexer object at 0x10ca3f690>

Я ожидал, что целое число 1 будет возвращено для s1.iloc(0), но вместо этого получит объект _iLocIndexer. Что я могу сделать с этим объектом? Как я могу работать с ним?

Ответ 1

Решение, связанное с @JohnE, заключается в использовании квадратных скобок [0] вместо (0) с iloc.

Дополнительная информация после прохождения через какой-то код pandas.

s1.iloc делает iloc похожим на метод. Но это атрибут, а значение атрибута _iLocIndexer. _iLocIndexer вызывается с аргументами, и он возвращает копию, игнорируя любые аргументы или kwargs (см. pandas.core.indexing._NDFrameIndexer. вызов в pandas). Вот почему s1.iloc(0) является действительным вызовом.

Когда s1.iloc[0] вызывается с квадратными скобками, создается экземпляр _iLocIndexer, и вызов оператора [] приводит к вызову метода iLocIndexer `getitem '.

То же самое верно для других индексаторов - loc, ix, at и iat. Эти индексы устанавливаются с помощью setattr в методе класса pandas.core.generic.NDFrame._create_indexer.