[Python] Pandas – 列の取得するiloc()関数の使い方
Pandasのiloc()
は、行や列をインデックス番号で取得するためのメソッドです。
iloc[]
は位置ベースのインデックス指定を行い、行や列を選択します。
列を取得する場合、iloc[:, 列番号]
の形式を使用します。
例えば、2番目の列を取得するにはdf.iloc[:, 1]
とします。
:
はすべての行を意味し、1
は2番目の列を指します。
複数の列を取得する場合は、リスト形式で列番号を指定します。
iloc()とは?基本的な使い方
iloc()の概要
iloc()
は、Pandasライブラリにおいて、データフレームの行や列を整数インデックスを用いて取得するためのメソッドです。
特に、行番号や列番号を指定してデータを抽出する際に便利です。
iloc()
を使用することで、データの位置に基づいて柔軟にデータを操作できます。
iloc()とloc()の違い
iloc()
とloc()
は、どちらもデータフレームからデータを取得するためのメソッドですが、以下のような違いがあります。
メソッド | 使用方法 | インデックスの指定方法 |
---|---|---|
iloc() | 整数インデックスを使用 | 行番号や列番号で指定 |
loc() | ラベルインデックスを使用 | 行名や列名で指定 |
iloc()の基本的な構文
iloc()
の基本的な構文は以下の通りです。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# iloc()を使用してデータを取得
result = df.iloc[行インデックス, 列インデックス]
行と列のインデックス指定方法
iloc()
では、行と列のインデックスを整数で指定します。
行インデックスは0から始まり、列インデックスも同様です。
以下の例では、特定の行と列を指定してデータを取得します。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# 1行目(インデックス0)の2列目(インデックス1)を取得
result = df.iloc[0, 1]
print(result) # 出力: 4
このように、iloc()
を使うことで、行と列のインデックスを指定してデータを簡単に取得できます。
iloc()を使った列の取得方法
単一の列を取得する方法
iloc()
を使用して単一の列を取得するには、行インデックスを指定し、列インデックスを指定します。
以下の例では、特定の列を取得しています。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# すべての行から2列目(インデックス1)のデータを取得
result = df.iloc[:, 1]
print(result)
出力:
0 4
1 5
2 6
Name: B, dtype: int64
複数の列を取得する方法
複数の列を取得する場合は、列インデックスをリストで指定します。
以下の例では、2つの列を同時に取得しています。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# すべての行から1列目(インデックス0)と3列目(インデックス2)のデータを取得
result = df.iloc[:, [0, 2]]
print(result)
出力:
A C
0 1 7
1 2 8
2 3 9
列の範囲を指定して取得する方法
列の範囲を指定して取得するには、スライスを使用します。
以下の例では、1列目から2列目までのデータを取得しています。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# すべての行から1列目(インデックス0)から2列目(インデックス1)までのデータを取得
result = df.iloc[:, 0:2]
print(result)
出力:
A B
0 1 4
1 2 5
2 3 6
列の順序を変更して取得する方法
列の順序を変更して取得するには、取得したい列のインデックスをリストで指定します。
以下の例では、列の順序を変更して取得しています。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# すべての行から3列目(インデックス2)と1列目(インデックス0)のデータを取得
result = df.iloc[:, [2, 0]]
print(result)
出力:
C A
0 7 1
1 8 2
2 9 3
このように、iloc()
を使うことで、列の取得方法を柔軟に操作することができます。
iloc()を使った行と列の同時取得
行と列を同時に取得する基本的な方法
iloc()
を使用して行と列を同時に取得するには、行インデックスと列インデックスをカンマで区切って指定します。
以下の例では、特定の行と列を同時に取得しています。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# 1行目(インデックス0)と2列目(インデックス1)のデータを取得
result = df.iloc[0, 1]
print(result) # 出力: 4
特定の行と列を組み合わせて取得する方法
特定の行と列を組み合わせて取得する場合、行インデックスと列インデックスをそれぞれ指定することができます。
以下の例では、2行目と3列目のデータを取得しています。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# 2行目(インデックス1)と3列目(インデックス2)のデータを取得
result = df.iloc[1, 2]
print(result) # 出力: 8
行と列の範囲を指定して取得する方法
行と列の範囲を指定して取得するには、スライスを使用します。
以下の例では、1行目から2行目までのデータと1列目から2列目までのデータを取得しています。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# 1行目から2行目(インデックス0:2)と1列目から2列目(インデックス0:2)のデータを取得
result = df.iloc[0:2, 0:2]
print(result)
出力:
A B
0 1 4
1 2 5
このように、iloc()
を使うことで、行と列を同時に柔軟に取得することができます。
iloc()を使ったデータのフィルタリング
条件に基づいて列を取得する方法
iloc()
を使用して条件に基づいて列を取得するには、まず条件を満たす行をフィルタリングし、その後に列を指定します。
以下の例では、列B
の値が5以上の行を取得し、列A
を表示しています。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# 列Bの値が5以上の行のインデックスを取得
indices = df.index[df['B'] >= 5].tolist()
# 取得したインデックスを使用して、列Aを表示
result = df.iloc[indices, 0]
print(result)
出力:
1 2
2 3
Name: A, dtype: int64
特定の値を持つ列を取得する方法
特定の値を持つ列を取得するには、条件を指定してフィルタリングを行います。
以下の例では、列C
の値が9である行を取得し、列A
を表示しています。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# 列Bの値が5以上の行のインデックスを取得
indices = df.index[df['C'] >= 9].tolist()
# 取得したインデックスを使用して、列Aを表示
result = df.iloc[indices, 0]
print(result)
出力:
2 3
Name: A, dtype: int64
複数条件で列をフィルタリングする方法
複数の条件を組み合わせて列をフィルタリングするには、論理演算子&
や|
を使用します。
以下の例では、列A
が2以上かつ列B
が5以上の行を取得し、列C
を表示しています。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# 列Aが2以上かつ列Bが5以上の行のインデックスを取得
indices = df.index[(df['A'] >= 2) & (df['B'] >= 5)].tolist()
# 取得したインデックスを使用して、列Cを表示
result = df.iloc[indices, 2]
print(result)
出力:
1 8
2 9
Name: C, dtype: int64
このように、iloc()
を使うことで、条件に基づいてデータをフィルタリングし、必要な列を取得することができます。
iloc()を使った列の操作
列の値を変更する方法
iloc()
を使用して特定の列の値を変更するには、行インデックスと列インデックスを指定して新しい値を代入します。
以下の例では、列B
の1行目(インデックス0)の値を変更しています。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# 列Bの1行目(インデックス0)の値を10に変更
df.iloc[0, 1] = 10
print(df)
出力:
A B C
0 1 10 7
1 2 5 8
2 3 6 9
列のデータ型を変更する方法
列のデータ型を変更するには、astype()メソッド
を使用します。
以下の例では、列A
のデータ型を整数型から浮動小数点型に変更しています。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# 列Aのデータ型を浮動小数点型に変更
df['A'] = df['A'].astype(float)
print(df.dtypes)
出力:
A float64
B int64
C int64
dtype: object
列の削除方法
列を削除するには、drop()メソッド
を使用します。
以下の例では、列C
を削除しています。
axis=1
を指定することで列を削除することを明示します。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# 列Cを削除
df = df.drop('C', axis=1)
print(df)
出力:
A B
0 1 4
1 2 5
2 3 6
このように、iloc()
を使うことで、列の値を変更したり、データ型を変更したり、列を削除したりすることができます。
応用例:複雑なデータ操作
複数の列を同時に操作する方法
iloc()
を使用して複数の列を同時に操作することができます。
以下の例では、列A
と列B
の値を同時に変更しています。
具体的には、列A
の値を2倍し、列B
の値を1減少させています。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# 列Aの値を2倍、列Bの値を1減少
df.iloc[:, 0] = df.iloc[:, 0] * 2 # 列A
df.iloc[:, 1] = df.iloc[:, 1] - 1 # 列B
print(df)
出力:
A B C
0 2 3 7
1 4 4 8
2 6 5 9
列の値を基に新しい列を作成する方法
既存の列の値を基に新しい列を作成するには、計算を行い、その結果を新しい列に代入します。
以下の例では、列A
と列B
の合計を新しい列D
に追加しています。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# 列Aと列Bの合計を新しい列Dに追加
df['D'] = df['A'] + df['B']
print(df)
出力:
A B C D
0 1 4 7 5
1 2 5 8 7
2 3 6 9 9
列の値を基にデータをソートする方法
特定の列の値を基にデータをソートするには、sort_values()メソッド
を使用します。
以下の例では、列B
の値を基にデータフレームを昇順にソートしています。
import pandas as pd
# データフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 2],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# 列Bの値を基にデータを昇順にソート
df_sorted = df.sort_values(by='B')
print(df_sorted)
出力:
A B C
2 3 2 9
0 1 4 7
1 2 5 8
このように、iloc()
を使った複雑なデータ操作により、データフレームの柔軟な操作が可能になります。
まとめ
この記事では、Pandasのiloc()メソッド
を使用してデータフレームから行や列を取得する方法や、データのフィルタリング、列の操作、複雑なデータ操作について詳しく解説しました。
これにより、データ分析や処理を行う際に、iloc()
を活用することで効率的にデータを操作できるようになります。
ぜひ、実際のデータセットを使ってiloc()
の機能を試し、データ操作のスキルを向上させてみてください。