2017-06-21 32 views
5

C++ geçmişindenim ve son zamanlarda python öğrenmeye başladım. Veriyi indeksleme ve seçme konusunda çalışıyordum. Pandas kütüphanesinde Series, DataFrame ve Panel sınıfında .iloc[] ile karşılaştım. .iloc'un ne olduğunu anlayamadım? İşlev mi yoksa öznitelik mi? Birçok kez yanlışlıkla [] yerine () kullanın ve gerçek sonucu alamıyorum (ama bana bir hata atmaz).Loc ve iloc türü nedir? (parantezler vs parantezler)

Örnek:

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 

kimse nerede operatörlerin böyle türü hakkında daha fazla incelemek için bana referans söyler misiniz.

+6

Numpy.r_'e benzer, bu nedenle bu tartışmalar yardımcı olabilir: https://stackoverflow.com/questions/16755482/why-does-numpy-r-use-brackets-instead-of-parentheses https: // stackoverflow.com/q/18601001/2285236 – ayhan

cevap

3

pratik cevap: Sen piton sözlüğü (veya hash tablosunun) pandaların uzantıları olarak iloc ve loc düşünmek ve aramalarının ziyade fonksiyon ya yöntem çağrıları gibi müdahale etmelidir. Bu nedenle, python sözdizimi ile korunurken, her zaman () yerine [] kullanın. o piton bir uzantısı olduğu için bir panda serisi veya dataframe benzer sözdizimi kullanılmalıdır

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

>>> dct['a'] 
3 

:

Örneğin, basit bir sözlük için, köşeli parantez içinde anahtar koyarak değerleri aramak benzer söz dizimi ile sözlüğü (en azından kavramsal olarak):

>>> 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 

sadece belirtmek için fazladan bir boyut ile, temelde dataframes için aynı, ve bu da nerede iloc ve daha kullanışlı hale loc, ama bu bu sorunun kapsamını aşmaktadır.

Daha derin yanıt: Bunu daha derin bir seviyede anlamaya çalışıyorsanız, __getitem__'u anlamalısınız. Bazı temel bilgiler için belki here'u başlatabilirsiniz. @ayhan tarafından yukarıdaki yorumlarda verilen second link'daki cevaplar da mükemmel ve sorunuzla oldukça alakalı.

İlgili konular