パンダがDataFrameから選択を行う主な方法は2つあります。
ドキュメントでは、整数の位置を指すために位置という用語を使用しています。わかりにくいので、この用語は好きではありません。整数の場所はより説明的であり、まさにその.iloc
意味です。ここでのキーワードはINTEGERです。整数の場所で選択する場合は整数を使用する必要があります。
概要を表示する前に、すべてのことを確認しましょう...
.ixは非推奨であり、あいまいであるため、使用しないでください。
パンダには3つの主要なインデクサーがあります。インデックス演算子自体(角かっこ[]
)、、.loc
およびがあり.iloc
ます。それらを要約しましょう:
[]
-主に列のサブセットを選択しますが、行も選択できます。行と列を同時に選択することはできません。
.loc
-ラベルのみで行と列のサブセットを選択します
.iloc
-整数位置のみで行と列のサブセットを選択します
私はほとんど使用し.at
たり.iat
、追加機能を追加したりせず、わずかなパフォーマンスの向上で使用しています。非常に時間に敏感なアプリケーションがない限り、それらの使用はお勧めしません。とにかく、それらの要約があります:
.at
ラベルのみでDataFrameの単一のスカラー値を選択します
.iat
整数の位置のみでDataFrameの単一のスカラー値を選択します
ラベルと整数の場所による選択に加えて、ブールインデックスとも呼ばれるブール選択が存在します。
説明例として.loc
、.iloc
ブール選択と.at
し、.iat
以下に示します
私たちは、最初の間の違いに焦点を当てる.loc
と.iloc
。違いについて説明する前に、DataFrameには各列と各行を識別するのに役立つラベルがあることを理解することが重要です。サンプルDataFrameを見てみましょう:
df = pd.DataFrame({'age':[30, 2, 12, 4, 32, 33, 69],
'color':['blue', 'green', 'red', 'white', 'gray', 'black', 'red'],
'food':['Steak', 'Lamb', 'Mango', 'Apple', 'Cheese', 'Melon', 'Beans'],
'height':[165, 70, 120, 80, 180, 172, 150],
'score':[4.6, 8.3, 9.0, 3.3, 1.8, 9.5, 2.2],
'state':['NY', 'TX', 'FL', 'AL', 'AK', 'TX', 'TX']
},
index=['Jane', 'Nick', 'Aaron', 'Penelope', 'Dean', 'Christina', 'Cornelia'])
太字の単語はすべてラベルです。ラベルは、age
、color
、food
、height
、score
およびstate
のために使用されている列。他のラベルは、Jane
、Nick
、Aaron
、Penelope
、Dean
、Christina
、Cornelia
行のラベルとして使用されています。これらの行ラベルをまとめて、インデックスと呼びます。
DataFrameの特定の行を選択する主な方法は、.loc
および.iloc
インデクサーを使用することです。これらの各インデクサーを使用して列を同時に選択することもできますが、今のところは、行に焦点を合わせる方が簡単です。また、各インデクサーは、名前の直後に続くブラケットのセットを使用して選択を行います。
.locはラベルによってのみデータを選択します
最初に.loc
、インデックスまたは列ラベルによってのみデータを選択するインデクサーについて説明します。サンプルのDataFrameでは、インデックスの値として意味のある名前を提供しています。多くのDataFrameには意味のある名前がなく、代わりにデフォルトで0からn-1までの整数に設定されます。nはDataFrameの長さ(行数)です。
あなたがそれらのうちの3つに 使用できる多くの異なる入力があります.loc
- 文字列
- 文字列のリスト
- 文字列を開始値および終了値として使用するスライス表記
文字列を含む.locで単一の行を選択する
1行のデータを選択するには、インデックスラベルを角かっこ内に配置します.loc
。
df.loc['Penelope']
データの行をシリーズとして返します
age 4
color white
food Apple
height 80
score 3.3
state AL
Name: Penelope, dtype: object
文字列のリストを含む.locで複数の行を選択する
df.loc[['Cornelia', 'Jane', 'Dean']]
これは、リストで指定された順序で行を持つDataFrameを返します。
スライス表記の.locで複数の行を選択する
スライス表記は、開始、停止、およびステップの値で定義されます。ラベルでスライスすると、パンダは戻り値にストップ値を含めます。以下のアーロンからディーンまでのスライス。そのステップサイズは明示的に定義されていませんが、デフォルトは1です。
df.loc['Aaron':'Dean']
複雑なスライスは、Pythonリストと同じ方法で取得できます。
.ilocは整数位置のみでデータを選択します
次にに移りましょう.iloc
。DataFrameのデータのすべての行と列には、それを定義する整数の場所があります。これは、出力に視覚的に表示されるラベルに追加されます。整数の位置は、0から始まる上/左からの行/列の数です。
あなたがそれらのうちの3つに 使用できる多くの異なる入力があります.iloc
- 整数
- 整数のリスト
- 開始値と終了値として整数を使用するスライス表記
整数を含む.ilocで単一の行を選択する
df.iloc[4]
これは、5行目(整数位置4)をシリーズとして返します
age 32
color gray
food Cheese
height 180
score 1.8
state AK
Name: Dean, dtype: object
整数のリストを含む.ilocで複数の行を選択する
df.iloc[[2, -2]]
これは、3番目と2番目から最後の行のDataFrameを返します。
スライス表記の.ilocで複数の行を選択する
df.iloc[:5:3]
.locおよび.ilocによる行と列の同時選択
両方の優れた機能の1つ.loc/.iloc
は、行と列の両方を同時に選択できることです。上記の例では、すべての列が各選択から返されました。行と同じタイプの入力を持つ列を選択できます。行と列の選択をカンマで区切るだけです。
たとえば、行JaneとDeanを次のように列の高さ、スコア、状態だけで選択できます。
df.loc[['Jane', 'Dean'], 'height':]
これは、行のラベルのリストと列のスライス表記を使用します
自然に.iloc
整数のみを使用して同様の操作を実行できます。
df.iloc[[1,4], 2]
Nick Lamb
Dean Cheese
Name: food, dtype: object
ラベルと整数位置による同時選択
.ix
は、ラベルと整数の位置と同時に選択を行うために使用されましたが、これは有用でしたが、時折混乱し、あいまいであり、ありがたいことに、廃止されました。ラベルと整数の場所を組み合わせて選択する必要がある場合は、選択ラベルまたは整数の場所の両方を選択する必要があります。
たとえば、行Nick
とCornelia
列2および4 を選択する場合は.loc
、次のように整数をラベルに変換して使用できます。
col_names = df.columns[[2, 4]]
df.loc[['Nick', 'Cornelia'], col_names]
または、get_loc
indexメソッドを使用して、インデックスラベルを整数に変換します。
labels = ['Nick', 'Cornelia']
index_ints = [df.index.get_loc(label) for label in labels]
df.iloc[index_ints, [2, 4]]
ブール選択
.locインデクサーはブール選択も実行できます。たとえば、年齢が30を超えるすべての行を検索して、food
およびscore
列のみを返す場合、次のようにできます。
df.loc[df['age'] > 30, ['food', 'score']]
これを複製することはでき.iloc
ますが、ブールシリーズを渡すことはできません。次のように、ブールSeriesをnumpy配列に変換する必要があります。
df.iloc[(df['age'] > 30).values, [2, 4]]
すべての行を選択する
.loc/.iloc
列の選択だけに使用できます。次のようにコロンを使用して、すべての行を選択できます。
df.loc[:, 'color':'score':2]
インデックス付け演算子は[]
、行と列を同時に選択することはできませんがスライスできます。
ほとんどの人は、列を選択することであるDataFrameインデックス演算子の主な目的に精通しています。文字列は1つの列をシリーズとして選択し、文字列のリストは複数の列をデータフレームとして選択します。
df['food']
Jane Steak
Nick Lamb
Aaron Mango
Penelope Apple
Dean Cheese
Christina Melon
Cornelia Beans
Name: food, dtype: object
リストを使用して複数の列を選択する
df[['food', 'score']]
あまり知られていないのは、スライス表記が使用される場合、選択は行ラベルまたは整数の場所によって行われることです。これは非常にわかりにくく、ほとんど使用しませんが、機能します。
df['Penelope':'Christina'] # slice rows by label
df[2:6:2] # slice rows by integer location
.loc/.iloc
行を選択するためのの明示性は非常に優先されます。インデックス付け演算子だけでは、行と列を同時に選択することはできません。
df[3:5, 'color']
TypeError: unhashable type: 'slice'
選択.at
と.iat
による選択は.at
とほぼ同じです.loc
が、DataFrame内の単一の「セル」のみを選択します。通常、このセルをスカラー値と呼びます。を使用する.at
には、行と列の両方のラベルをカンマで区切って渡します。
df.at['Christina', 'color']
'black'
での選択は.iat
とほぼ同じです.iloc
が、単一のスカラー値のみを選択します。行と列の両方の位置に整数を渡す必要があります
df.iat[2, 5]
'FL'