2015-05-26 11 views
11
>>> 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> 

Mi aspettavo che il numero intero 1 fosse restituito per s1.iloc(0), ma invece ho ottenuto un oggetto _iLocIndexer. Cosa posso fare con questo oggetto? Come lavoro con esso?panda: come lavorare con _iLocIndexer?

+7

parentesi quadre: '[0]' 'non (0)' – JohnE

risposta

16

La soluzione, dovuta a @JohnE, consiste nell'utilizzare le parentesi quadre [0] anzichécon iloc.

qualche info in più dopo aver scavato attraverso un codice panda.

s1.iloc fa iloc aspetto di un metodo. Ma è un attributo e il valore dell'attributo è _iLocIndexer. _iLocIndexer è richiamabile con argomenti e restituisce una copia di se stesso ignorando qualsiasi args o kwargs (vedi pandas.core.indexing._NDFrameIndexer. chiamata nel codice panda). Questo è il motivo per cui s1.iloc(0) è una chiamata valida.

Quando s1.iloc[0] viene chiamato con parentesi quadre, un _iLocIndexer viene creata un'istanza e la chiamata alla [] risultati dell'operatore in una chiamata al metodo '`GetItem s' il iLocIndexer.

Lo stesso vale per gli altri indicizzatori - loc, ix, at e iat. Questi indicizzatori sono installati utilizzando setattr nel metodo di classe pandas.core.generic.NDFrame._create_indexer.