2017-06-21 3 views
5

私はC++のバックグラウンドで、最近はPythonを学び始めました。私はインデックス作成とデータの選択について勉強していました。私は、パンダスの図書館で、DataFramePanelというクラスの.iloc[]を見つけました。 .ilocは何か分かりませんでしたか?それは機能か属性ですか?何度も私は間違って[]の代わりに()を使用し、実際の結果は得られません(ただし、エラーは発生しません)。locとilocのタイプは何ですか? (かっこvsカッコ)

例:

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 

誰も私に演算子のようなタイプについて多くを研究するための基準を言うことができます。

+6

これはnumpy.r_と似ていますので、これらの議論が役に立ちます:https://stackoverflow.com/questions/16755482/why-does-numpy-r-use-brackets-instead-of- parentheses https:// stackoverflow.com/q/18601001/2285236 – ayhan

答えて

3

実用的な答え:あなたはPythonの辞書(またはハッシュテーブル)のパンダの拡張としてiloclocを考えると、検索ではなく、関数やメソッド呼び出しとして扱うべきです。したがって、Python構文を維持するには、()ではなく常に[]を使用してください。

例えば、簡単な辞書のために、あなたは角括弧でキーを入れて値を検索:

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

>>> dct['a'] 
3 

それは、Pythonの拡張であるので、あなたはパンダシリーズまたはデータフレームと同様の構文を使用する必要があります類似した構文を持つ辞書(少なくとも概念的には)、:

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

それは余分な次元を指定するだけで、データフレームのために基本的に同じだ、とiloclocがより便利になるところもありますが、その」この質問の範囲を超えています。

詳細な回答:これを深いレベルで理解しようとしている場合は、__getitem__を理解する必要があります。いくつかの基本については、おそらくhereを開始することができます。上記の@ayhanのコメントに記載されているsecond linkの回答も優れており、あなたの質問にはかなり関連しています。

関連する問題