サーチ…


前書き

データフレームのインデクサを使用して、データフレーム内の行にアクセスすると、オブジェクト.ix.loc.ilocとどのようにそれがboolean型マスクを使用してから自分自身を区別します。

ブールインデックスを使用したDataFrameへのアクセス

これは私たちのサンプルデータフレームになります:

df = pd.DataFrame({"color": ['red', 'blue', 'red', 'blue']},
                  index=[True, False, True, False])
      color
True    red
False  blue
True    red
False  blue

.locアクセスする

df.loc[True]
     color
True   red
True   red

.ilocアクセスする

df.iloc[True]
>> TypeError

df.iloc[1]
color    blue
dtype: object

重要なことは、古いパンダバージョンではブール値と整数の入力を区別できないため、 .iloc[True].iloc[1]と同じ結果を.iloc[1]

.ixアクセスする

df.ix[True]
     color
True   red
True   red

df.ix[1]
color    blue
dtype: object

ご覧のとおり、 .ixは2つの動作があります。これはコードでは非常に悪いことであり、避けるべきです。より明示的に使用するには、 .ilocまたは.locを使用してください。

ブーリアンマスクをデータフレームに適用する

これは私たちのサンプルデータフレームになります:

  color      name   size
0   red      rose    big
1  blue    violet    big
2   red     tulip  small
3  blue  harebell  small

魔法の__getitem__または[]アクセサを使用しています。データフレームと同じ長さの真と偽のリストを与えると、次のようになります。

df[[True, False, True, False]]
  color   name   size
0   red   rose    big
2   red  tulip  small

列値に基づいたデータのマスキング

これは私たちのサンプルデータフレームになります:

  color      name   size
0   red      rose    big
1  blue    violet  small
2   red     tulip  small
3  blue  harebell  small

データフレームから単一の列にアクセスすると、簡単な比較==を使用して、列の各要素を指定された変数と比較して、真と偽のpd.Seriesを生成するpd.Seriesができます

df['size'] == 'small'
0    False
1     True
2     True
3     True
Name: size, dtype: bool

このpd.Seriesは、単純なlist拡張であるnp.arrayの拡張です。したがって、これを上記の例のように__getitem__または[]アクセサに__getitem__ことができます。

size_small_mask = df['size'] == 'small'
df[size_small_mask]
  color      name   size
1  blue    violet  small
2   red     tulip  small
3  blue  harebell  small

インデックス値に基づくマスキングデータ

これは私たちのサンプルデータフレームになります:

         color   size
name                 
rose       red    big
violet    blue  small
tulip      red  small
harebell  blue  small

列の値と同様に、インデックス値に基づいてマスクを作成できます。

rose_mask = df.index == 'rose'
df[rose_mask]
     color size
name           
rose   red  big

しかし、これを実行することは、ほぼ同じです

df.loc['rose']
color    red
size     big
Name: rose, dtype: object

重要な違いは、 .locが一致するインデックス内の1つの行のみをpd.Seriesすると、 pd.DataFrameが返されます。一致する行が増えた場合、 pd.DataFrameが返されます。これは、この方法をむしろ不安定にする。

この動作は、 .loc単一のエントリのリストを与えることで制御できます。これにより、データフレームが返されます。

df.loc[['rose']]
         color   size
name                 
rose       red    big


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow