Pandas df.iloc[] 関数

Pandas 常用函数Pandas 常用関数


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 リストのインデックス方法と非常に似ています。

実例

import pandas as pd

# サンプル 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

コードの解説:

  1. df.iloc[0]最初の行(位置0)を選択し、Series を返します。
  2. iloc[]そのスライスは左閉右開(半開区間)で、位置 1、2、3 を含み、位置 4 は含みません。
  3. df.iloc[[1, 3, 4]]複数の特定の位置にある行を選択します。
  4. df.iloc[:3]開始位置を省略すると、0から始まることを示します。

例2:特定の行と列を選択する

iloc[]行と列を同時に選択でき、位置番号によって正確に特定できます。

実例

import pandas as pd

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

コードの解説:

  1. df.iloc[1, 2]単一のセルを選択し、スカラー値を返します。
  2. df.iloc[0, [1, 3]]特定の行の複数の列を選択します。
  3. df.iloc[:, [0, 2]]コロンはすべての行を選択することを示します。
  4. iloc[]そのスライスは Python の慣例に従い、左閉右開(終了位置を含まない)です。

例3:カスタムインデックスと組み合わせて使用する

DataFrame にカスタムインデックスがある場合、iloc[]それでも位置に基づいてデータを選択し、インデックスラベルには関係ありません。

実例

import pandas as pd

# カスタムインデックスを持つ 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[]ブール配列を使用した選択もサポートされており、条件フィルタリングで役立ちます。

実例

import pandas as pd

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

コードの解説:

  1. ブール配列の長さは、行選択の場合は行数、列選択の場合は列数と同じである必要があります。
  2. ilocブール配列を使用する場合、loc[]その条件フィルタリングとは異なり、直接位置に基づいて選択します。
  3. スライスのステップ(間隔)を使用して特定のパターンを選択できます。例えば、1行おきに選択するなどです。

注意事項

  • iloc[]位置インデックスを使用し、スライスは Python の慣例(左閉右開)に従います。
  • 範囲外の位置が渡された場合、IndexError エラーが発生します。
  • 負のインデックスをサポートしており、-1 は最後の行、-2 は末尾から2番目の行です。
  • とloc[]対照的に、iloc[]条件式を使用した直接のフィルタリングはサポートされておらず、まずブール配列を計算する必要があります。

重要な注意:loc[]とiloc[]これらの違いは Pandas 学習における要点です。loc[]ラベルに基づき、iloc[]位置に基づきます。開発時には両者を明確に区別して、混乱によるエラーを避けることをお勧めします。


まとめ

iloc[]これは Pandas における整数位置に基づくデータセレクターであり、Python リストに似たインデックス操作を提供します。主な特徴は、データの位置(0から始まる)に完全に基づいており、カスタムインデックスラベルの影響を受けないことです。

実際の使用では、iloc[]特に以下のシーンに適しています:位置によってデータを選択する必要がある場合、負のインデックスを使用する必要がある場合、スライスのステップを使用する必要がある場合、インデックスラベルが不明な状態でデータを選択する場合です。loc[]とiloc[]これと組み合わせることで、さまざまなデータ選択のニーズに柔軟に対応できます。

Pandas 常用函数Pandas 常用関数

その他の拡張