サイトアイコン アマチュア無線局JS2IIU

【Pandas】DataFrameの要素へアクセスする方法

こんにちは、JS2IIUです。DataFrameの一部分要素を取り出して操作することはPandasを使うにあたって必要となってきます。使い方を把握して、使いこなせるようにしていきましょう。今回もよろしくお願いします。

はじめに

Pandasは、Pythonでデータ分析や処理を行う際の必須ライブラリです。その基本構造であるDataFrameは、行と列のラベル付きデータを格納する2次元のデータ構造で、多くの場面で利用されています。データに効率的にアクセスすることは、データ分析の基本スキルです。

この記事では、DataFrameの要素にアクセスする方法を詳しく解説します。特に以下のトピックを中心に扱います。

これらを正確に使い分けることで、効率的かつ柔軟にデータを操作できるようになります。

DataFrameの要素アクセス方法

Pandasには、さまざまな方法でDataFrameの要素へアクセスできます。それぞれの使い方と特長を理解しておくと、状況に応じた適切な選択が可能になります。

1. .loc(ラベルベースのアクセス)

2. .iloc(インデックスベースのアクセス)

3. .at(単一要素への高速アクセス)

4. .iat(インデックスベースの高速アクセス)

サンプルコード

以下は、さまざまな要素アクセス方法を使った例です。

import pandas as pd

# サンプルデータを作成
data = {
    "Name": ["Alice", "Bob", "Charlie", "David"],
    "Age": [25, 30, 35, 40],
    "Score": [85, 90, 95, 100]
}
df = pd.DataFrame(data)

# 1. .loc を使ったラベルベースのアクセス
row_by_label = df.loc[1]  # ラベル(行名)で行を取得
col_by_label = df.loc[:, "Age"]  # ラベルで列を取得
filtered_by_condition = df.loc[df["Score"] > 90]  # 条件フィルタリング

# 2. .iloc を使ったインデックスベースのアクセス
row_by_index = df.iloc[2]  # 行インデックスで取得
col_by_index = df.iloc[:, 1]  # 列インデックスで取得
sliced_data = df.iloc[1:3, 0:2]  # スライスで部分取得

# 3. .at を使った単一要素へのアクセス
single_value_at = df.at[0, "Name"]  # ラベルでアクセス

# 4. .iat を使った単一要素へのアクセス
single_value_iat = df.iat[2, 2]  # インデックスでアクセス

# 結果を表示
print("DataFrame:\n", df)
print("\n.locでラベルベースの行取得:\n", row_by_label)
print("\n.locでラベルベースの列取得:\n", col_by_label)
print("\n.locで条件フィルタリング:\n", filtered_by_condition)
print("\n.ilocでインデックスベースの行取得:\n", row_by_index)
print("\n.ilocでスライス取得:\n", sliced_data)
print("\n.atで単一要素取得:", single_value_at)
print("\n.iatで単一要素取得:", single_value_iat)

コードの解説

サンプルデータの作成

.locの使用

.ilocの使用

.at.iatの使用

実行結果

上記のコードを実行すると、以下のような結果が得られます。

DataFrame:
       Name  Age  Score
0    Alice   25     85
1      Bob   30     90
2  Charlie   35     95
3    David   40    100

.locでラベルベースの行取得:
 Name     Bob
Age       30
Score     90
Name: 1, dtype: object

.locでラベルベースの列取得:
 0    25
1    30
2    35
3    40
Name: Age, dtype: int64

.locで条件フィルタリング:
       Name  Age  Score
2  Charlie   35     95
3    David   40    100

.ilocでインデックスベースの行取得:
 Name    Charlie
Age          35
Score        95
Name: 2, dtype: object

.ilocでスライス取得:
       Name  Age
1      Bob   30
2  Charlie   35

.atで単一要素取得: Alice

.iatで単一要素取得: 95

まとめ

参考リンク

今回も少しだけPRです。

Pandasについて詳しく知りたいかた、もっと使いこなしたい方におすすめの本です。数年前に購入しましたが、今も手元に置いて時々見返しています。

「pandasクックブック Pythonによるデータ処理のレシピ」Theodore Petrou著、黒川利明訳。

最後まで読んでいただきありがとうございます。73

モバイルバージョンを終了