2017-06-21 5 views
5

Ich bin von C++ Hintergrund und begann vor kurzem Python zu lernen. Ich habe über Indizierung und Auswahl von Daten gelernt. Ich stolperte in der Pandas Bibliothek .iloc[] in der Klasse Series, DataFrame und Panel. Ich konnte nicht verstehen, was ist .iloc? Ist es Funktion oder ein Attribut? Viele Male verwende ich versehentlich () anstelle von [] und bekomme nicht das tatsächliche Ergebnis (aber es wirft mir keinen Fehler).Was ist der Typ von Lok und Iloc? (Klammern gegen Klammern)

Beispiel:

In [43]: s = pd.Series(np.arange(5), index=np.arange(5)[::-1], dtype='int64') 

In [44]: s[s.index.isin([2, 4, 6])] 
Out[44]: 
4 0 
2 2 
dtype: int64 

In [45]: s.iloc(s.index.isin([2,4,6])) 
Out[45]: <pandas.core.indexing._iLocIndexer at 0x7f1e68d53978> 

In [46]: s.iloc[s.index.isin([2,4,6])] 
Out[46]: 
4 0 
2 2 
dtype: int64 

Kann mir jemand sagen, wo Bezug viel mehr über diese Art von Betreibern zu studieren.

+6

Es ist vergleichbar mit numpy.r_, so dass diese Diskussionen hilfreich sein können: https://StackOverflow.com/questions/16755482/Why-does-numpy-R-use-Brackets-instead-of-parentheses https: // stackoverflow.com/q/18601001/2285236 – ayhan

Antwort

3

Die praktische Antwort: Sie denken sollen iloc und loc als Pandas Erweiterungen der Python-Wörterbuch (oder Hash-Tabelle) und als Lookups behandeln, anstatt Funktion oder Methodenaufrufe. Verwenden Sie daher immer mit der Python-Syntax [] statt ().

Zum Beispiel für ein einfaches Wörterbuch, schauen Sie Werte, indem Sie die Taste in eckigen Klammern setzen:

>>> dct = { 'a':3, 'c':9 } 

>>> dct['a'] 
3 

Sie ähnliche Syntax mit einer Pandas Serie oder Datenrahmen verwenden sollten, weil es sich um eine Erweiterung der Python ist Wörterbuch (zumindest vom Konzept her), mit analoger Syntax:

>>> ser = pd.Series(dct) 

>>> ser['a']  # same syntax as python dictionary 
3 
>>> ser.loc['a'] # pandas dictionary syntax (label-based) 
3 
>>> ser.iloc[0]  # pandas list/array syntax (location-based) 
3 

Es ist im Grunde das gleiche für Datenrahmen, nur mit einer zusätzlichen Dimension zu geben, und das ist auch, wo iloc und loc nützlicher worden, aber das s geht über den Rahmen dieser Frage hinaus.

die tiefere Antwort: Wenn Sie wirklich versuchen, dies auf einer tieferen Ebene zu verstehen, müssen Sie __getitem__ verstehen. Sie könnten vielleicht here für einige Grundlagen starten. Die Antworten in der second link in den Kommentaren von @ayhan sind auch hervorragend und ziemlich relevant für Ihre Frage.

Verwandte Themen