Pandas df.iloc[] 関数
iloc[]これは Pandas における整数位置(Integer Location)に基づくインデックス方式であり、行番号と列番号を使用してデータを選択します。loc[]対照的に、iloc[]完全にデータの位置(0から始まる整数インデックス)に基づいており、データ自体に設定されたラベルは考慮しません。
位置によってデータを選択する必要がある場合、または具体的なインデックスラベルがわからない状態でデータを選択する場合は、iloc[]最適な選択です。その動作は Python リストのインデックスと非常に似ており、Python ユーザーにとって非常に直感的です。
基本構文とパラメータ
iloc[]これは DataFrame のインデクサーであり、角括弧[]でアクセスします。整数、整数のリスト、整数スライス、またはブール配列のみをパラメータとして受け入れます。
構文形式
# 选择单行(返回 Series) DataFrame.iloc[行号] # 选择多行(返回 DataFrame) DataFrame.iloc[[行号1, 行号2, ...]] # 使用切片选择连续行 DataFrame.iloc[起始行:结束行] # 选择行和列 DataFrame.iloc[行号, 列号] DataFrame.iloc[行切片, 列切片] DataFrame.iloc[行列表, 列列表]
パラメータの説明
| パラメータの位置 | パラメータの型 | 説明 |
|---|---|---|
| 最初のパラメータ(行) | 整数、整数のリスト、整数スライス、ブール配列 | 行の選択に使用され、位置(0から始まる)に基づきます。 |
| 2番目のパラメータ(列) | 整数、整数のリスト、整数スライス | オプションで、列の選択に使用されます。これも位置に基づきます。 |
戻り値の説明
- 単一の要素:スカラー値を返します。
- 単一行:Series を返します。
- 複数行:DataFrame を返します。
- 行と列の組み合わせ:選択結果に応じて Series または DataFrame を返します。
実例
豊富な例を通じて、iloc[]の使い方を完全にマスターしましょう。
例1:基本的な使い方 - 行を選択する
iloc[]位置に基づくインデックスを使用します。Python リストのインデックス方法と非常に似ています。
実例
# サンプル DataFrame を作成
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88],
'grade': ['A', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data)
print("元の DataFrame:")
print(df)
print()
# 最初の行(インデックス 0)を選択
print("最初の行(位置 0)を選択:")
print(df.iloc[0])
print()
# 複数の行を選択
print("1、3、4行目を選択:")
print(df.iloc[[1, 3, 4]])
print()
# スライスを使用して連続する行を選択(注意:iloc のスライスは左閉右開(半開区間)で、Python と同じです)
print("1行目から3行目(位置 1、2、3)を選択:")
print(df.iloc[1:4])
print()
# 先頭の3行を選択
print("先頭の3行:")
print(df.iloc[:3])
実行結果:
原始 DataFrame:
name age score grade
0 Alice 18 85 A
1 Bob 19 92 A
2 Charlie 17 78 B
3 David 18 90 A
4 Eve 20 88 B
选择第一行(位置 0):
name Alice
age 18
score 85
grade A
Name: 0, dtype: object
选择第 1、3、4 行:
name age score grade
1 Bob 19 92 A
3 David 18 90 A
4 Eve 20 88 B
选择第 1 行到第 3 行(位置 1、2、3):
name age score grade
1 Bob 19 92 A
2 Charlie 17 78 B
3 David 18 90 A
前 3 行:
name age score grade
0 Alice 18 85 A
1 Bob 19 92 A
2 Charlie 17 78 B
コードの解説:
df.iloc[0]最初の行(位置0)を選択し、Series を返します。iloc[]そのスライスは左閉右開(半開区間)で、位置 1、2、3 を含み、位置 4 は含みません。df.iloc[[1, 3, 4]]複数の特定の位置にある行を選択します。df.iloc[:3]開始位置を省略すると、0から始まることを示します。
例2:特定の行と列を選択する
iloc[]行と列を同時に選択でき、位置番号によって正確に特定できます。
実例
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88],
'grade': ['A', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data)
# 単一のセルを選択(2行目、3列目)
print("位置 [1, 2] のセルを選択:")
print(df.iloc[1, 2]) # 92 を返す
print()
# 特定の行の特定の列を選択
print("0行目の1列目と3列目を選択:")
print(df.iloc[0, [1, 3]])
print()
# 複数の行と複数の列を選択
print("0、2、4行目の0、2列目を選択:")
print(df.iloc[[0, 2, 4], [0, 2]])
print()
# すべての行の特定の列を選択
print("すべての行の0列目と2列目:")
print(df.iloc[:, [0, 2]])
print()
# 行スライスと列スライスの組み合わせ
print("1行目から3行目まで、0列目から2列目まで(2を含まない):")
print(df.iloc[1:4, :3])
実行結果:
选择位置 [1, 2] 的单元格:
92
选择第 0 行的第 1 和第 3 列:
age 19
grade A
Name: 0, dtype: object
选择第 0、2、4 行的第 0、2 列:
name score
0 Alice 85
2 Charlie 78
4 Eve 88
所有行的第 0 和第 2 列:
name score
0 Alice 85
1 Bob 92
2 Charlie 78
3 David 90
4 Eve 88
第 1 到 3 行的第 0 到第 2 列(不含):
name age
1 Bob 19
2 Charlie 17
3 David 18
コードの解説:
df.iloc[1, 2]単一のセルを選択し、スカラー値を返します。df.iloc[0, [1, 3]]特定の行の複数の列を選択します。df.iloc[:, [0, 2]]コロンはすべての行を選択することを示します。iloc[]そのスライスは Python の慣例に従い、左閉右開(終了位置を含まない)です。
例3:カスタムインデックスと組み合わせて使用する
DataFrame にカスタムインデックスがある場合、iloc[]それでも位置に基づいてデータを選択し、インデックスラベルには関係ありません。
実例
# カスタムインデックスを持つ DataFrame を作成
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88]
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
print("カスタムインデックスを持つ DataFrame:")
print(df)
print()
# iloc は位置に基づいて選択するため、カスタムインデックスの影響を受けません
print("iloc)
print(df.iloc[0])
print()
print("iloc[1:3] は2、3行目(位置1、2)を選択:")
print(df.iloc[1:3])
print()
# 負のインデックスを使用(末尾から数える)
print("最後の行(位置 -1):")
print(df.iloc[-1])
print()
print("末尾から3行:")
print(df.iloc[-3:])
実行結果:
带自定义索引的 DataFrame:
name age score
a Alice 18 85
b Bob 19 92
c Charlie 17 78
d David 18 90
e Eve 20 88
iloc[0] 选择第一行(位置 0),与标签 'a', 'b', 'c' 无关:
name Alice
age 18
score 85
Name: a, dtype: object
iloc[1:3] 选择第 2、3 行(位置 1、2):
name age score
b Bob 19 92
c Charlie 17 78
最后一行(位置 -1):
name Eve
age 20
score 88
Name: e, dtype: object
倒数 3 行:
name age score
c Charlie 17 78
d David 18 90
e Eve 20 88
コードの解説:
- DataFrame がカスタムインデックス('a', 'b', 'c', 'd', 'e')を使用していても、
iloc[]それでも位置に基づいて選択します。 iloc[0]インデックスラベルが何であっても、常に最初の行(物理的な位置)を選択します。iloc負のインデックスをサポートしており、-1 は最後の行、-2 は末尾から2番目の行を表します。
例4:ブール配列を使用して選択する
iloc[]ブール配列を使用した選択もサポートされており、条件フィルタリングで役立ちます。
実例
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88],
'grade': ['A', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data)
# ブール配列を使用して選択
bool_array = [True, False, True, False, True]
print("ブール配列 [True, False, True, False, True] を使用して選択した行:")
print(df.iloc[bool_array])
print()
# 条件と組み合わせて使用(最初にブール配列を計算し、それを iloc に渡す)
# スコアが85より大きい行を選択
condition = df['score'] > 85
print("スコアが85より大きい行:")
print(df.iloc[condition.values]) # ブール配列を取得
print()
# 特定の位置の行を選択した後、特定の列を選択
print("1、3行目の1、2列目:")
print(df.iloc[[1, 3], 1:3])
実行結果:
使用布尔数组 [True, False, True, False, True] 选择的行:
name age score grade
0 Alice 18 85 A
2 Charlie 17 78 B
4 Eve 20 88 B
分数大于 85 的行:
name age score grade
1 Bob 19 92 A
3 David 18 90 A
4 Eve 20 88 B
第 1、3 行的第 1、2 列:
age score
1 19 92
3 18 90
コードの解説:
- ブール配列の長さは、行選択の場合は行数、列選択の場合は列数と同じである必要があります。
ilocブール配列を使用する場合、loc[]その条件フィルタリングとは異なり、直接位置に基づいて選択します。- スライスのステップ(間隔)を使用して特定のパターンを選択できます。例えば、1行おきに選択するなどです。
注意事項
iloc[]位置インデックスを使用し、スライスは Python の慣例(左閉右開)に従います。- 範囲外の位置が渡された場合、IndexError エラーが発生します。
- 負のインデックスをサポートしており、-1 は最後の行、-2 は末尾から2番目の行です。
- と
loc[]対照的に、iloc[]条件式を使用した直接のフィルタリングはサポートされておらず、まずブール配列を計算する必要があります。
重要な注意:
loc[]とiloc[]これらの違いは Pandas 学習における要点です。loc[]ラベルに基づき、iloc[]位置に基づきます。開発時には両者を明確に区別して、混乱によるエラーを避けることをお勧めします。
まとめ
iloc[]これは Pandas における整数位置に基づくデータセレクターであり、Python リストに似たインデックス操作を提供します。主な特徴は、データの位置(0から始まる)に完全に基づいており、カスタムインデックスラベルの影響を受けないことです。
実際の使用では、iloc[]特に以下のシーンに適しています:位置によってデータを選択する必要がある場合、負のインデックスを使用する必要がある場合、スライスのステップを使用する必要がある場合、インデックスラベルが不明な状態でデータを選択する場合です。loc[]とiloc[]これと組み合わせることで、さまざまなデータ選択のニーズに柔軟に対応できます。
Pandas 常用関数