だが、私はパンダSeries
を持っている、と私はそうのように、特定のインデックスで要素のセットにアクセスしたいとしましょうパラメータとして:パンダインデクサ方法とタプル
In [1]:
from pandas import Series
import numpy as np
s = Series(np.arange(0,10))
In [2]: s.loc[[3,7]]
Out[2]:
3 3
7 7
dtype: int64
.loc
メソッドは、パラメータとしてlist
を受け入れますこのタイプの選択のために。 .iloc
と.ix
の方法は同じ方法で動作します。
私はパラメータにtuple
を使用する場合は、.loc
と.iloc
両方が失敗した:
In [5]: s.loc[(3,7)]
---------------------------------------------------------------------------
IndexingError Traceback (most recent call last)
........
IndexingError: Too many indexers
In [6]: s.iloc[(3,7)]
---------------------------------------------------------------------------
IndexingError Traceback (most recent call last)
........
IndexingError: Too many indexers
そして.ix
は奇妙な結果生成:今
In [7]: s.ix[(3,7)]
Out[7]: 3
を、私は「あなたができることを得ます生のpythonでこれを行うこともできますlist
:
list
から特定のインデックスのセットを取得するには、理解度、as explained hereを使用する必要があります。
しかし一方で、tuple
を使用してパンダの行を選択すると、DataFrame
は3つのすべてのインデックス作成方法で問題なく動作しているようです。ここで.loc
方法の例です:
In [8]:
from pandas import DataFrame
df = DataFrame({"x" : np.arange(0,10)})
In [9]:
df.loc[(3,7),"x"]
Out[9]:
3 3
7 7
Name: x, dtype: int64
私の3つの質問があります:
- はなぜ
Series
インデクサはtuple
を受け入れていないのだろうか?所望のインデックスのセットが
不変の一回使用パラメータであるので、tuple
を使用することは自然に
と思われる。これは の目的のためだけにlist
インターフェイスを模倣していますか? - 奇妙な説明は何ですか
Series
.ix
結果はありますか? - なぜこの問題に関して
Series
とDataFrame
の間に矛盾があるのですか?
すべてに同意します。あなたの最初の質問に答えるために、私がしようとしているのは、私が自然だと思う構文を使うことだけです。インデックス番号の特定のセットは物事が得られるほど不変であると考えられ、「タプル」は理にかなっています。私がタプルを使うことができないのは、世界の終わりではなく、特に私はそれを諦めていません。結局、それをやり遂げることができなくても、私の好奇心を引き起こすほど私を挫折させることはありませんでした。 –
偉大な答え。 's.ix [(3、7)]'が '3 'を返すのはバグだと主張したいと思います。どのようにこれが意図された行動になるのか想像がつきません。予想外のインプットがパンダでうまく処理されないことがあると思います。 – JoeCondron
@JoeCondronはい、良い点!あなたと全く同意します。 – JohnE