Ten jest udokumentowane, a to część Advanced Indexing. Kluczem jest to, że w ogóle nie używasz wskaźnika zatrzymania.
Atrybut ix
jest specjalnym rzeczą, która pozwala robić różnego rodzaju zaawansowanych indeksowania przez wytwórnię -choosing listę etykiet, używając integracyjnego gamę etykiet zamiast pół wyłączności zakres indeksów, i różne inne rzeczy.
Jeśli nie chcesz, że po prostu nie używać go:
In [191]: b[:3][0]
Out[191]:
0 -0.209386
1 0.050345
2 0.318414
Name: 0
Jeśli grasz z tym nieco bardziej bez czytania docs, prawdopodobnie pochodzić z przypadku, gdzie etykiety to, na przykład, 'A', 'B', 'C', 'D'
zamiast 0, 1, 2, 3
, i nagle b.ix[:3]
zwróci tylko 3 wiersze zamiast 4, a będziesz znowu zaskoczony.
Różnica polega na tym, że w tym przypadku b.ix[:3]
to plaster na indeksów, a nie na etykiet.
To, czego żądałeś w swoim kodzie, jest niejednoznaczne między "wszystkimi etykietami aż do 3" i "wszystkimi indeksami aż do 3, ale nie", a etykiety zawsze wygrywają z ix
(bo jeśli nie chcesz przecinać etykiety, w pierwszej kolejności nie musisz używać ix
). I dlatego powiedziałem, że problem polega na tym, że w ogóle nie używasz wskaźnika zatrzymania.
Dlaczego używasz 'b.ix' zamiast tylko' b [: 3] '? – abarnert