【Python】2次元配列から要素を取り出す方法

【Python】2次元配列から要素を取り出す方法

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座

Pythonで表形式のデータや行列から必要な部分を抽出する場面は、データ分析やファイル処理など、幅広い実務の文脈で頻繁に発生します。2次元配列から目的の値を得る手段としてよく使われるのが標準の「インデックス指定」や「リスト内包表記」であり、単一の値の取得や複数行の抽出が可能です。

この記事では、Python環境で作成した2次元データ構造から目的の情報を的確に取得するための基本的な使い方を解説していきます。なお、Pythonの標準機能では「リストのリスト」として扱われる構造を一般的に2次元配列と呼びますが、Python公式ドキュメント上のとしてはリスト(list)であり、厳密には配列(array)とは異なります。

標準のリスト機能を用いた特定の行や列の扱い方など、エラーを防ぐ実用的な手順についてサンプルコード付きで解説していきますので、ぜひ参考にしてください。



Pythonで2次元配列の要素を取り出す方法

Pythonの公式ドキュメントで解説されている標準のリスト機能を活用して、多次元のデータ構造から必要な情報を取得する手順を解説します。ここでの「2次元配列」はリストのリストとして実装されており、追加ライブラリなしで柔軟なデータ処理が可能です。

具体的な手法は、以下の通りです。

  • 単一の要素を取得する
  • 特定の行を取得する
  • 特定の列を取得する

それぞれの目的に応じて、インデックスの指定方法やループ処理の書き方が異なります。データ分析やファイル処理の基本となる技術ですので、しっかり押さえておきましょう。

単一の要素を取得する

リストのリストとして定義された2次元データから、特定の1つの値だけを取得するには、行と列のインデックスを順番に指定します。Pythonのインデックスは0から始まるため、最初の行や列は0番目として扱われるのが特徴です。

インデックスを使った単一要素の取得方法は、以下のコードの通りです。

data = [
    [10, 20, 30],
    [40, 50, 60],
    [70, 80, 90]
]

# 2行目(インデックス1)、3列目(インデックス2)を取得
value = data[1][2]
print(value)  # 60

上記のコードでは、変数に対して二つの角括弧を続け、最初に行、次に列の位置を指定して目的の値を出力しています。存在しない位置を指定するとIndexErrorが発生するため、範囲内に収まる数値を設定しなければなりません。

Pythonの公式チュートリアルでは、リストに対するインデックス指定の活用について、次のように説明しています。

リストから要素を削除する際、値を指定する代わりにインデックスを指定する方法があります。

出典:Python公式ドキュメント データ構造

このように、インデックス指定はリスト操作全般で活用される基本的な仕組みであり、要素の取り出しにも同じ考え方が適用されるため、CSVの解析やゲームの盤面管理など幅広い用途に対応しています。


Python研修一覧はこちら

目的に合うPython研修を一覧形式から探したい方は、ぜひご利用ください。

Python研修を比較する

Java研修一覧はこちら

目的に合うJava研修を一覧形式から探したい方は、ぜひご利用ください。

Java研修を比較する

PHP研修一覧はこちら

目的に合うPHP研修を一覧形式から探したい方は、ぜひご利用ください。

PHP研修を比較する

新入社員研修

目的に合う新入社員研修を一覧形式から探したい方は、ぜひご利用ください。

新入社員研修を比較する

全ての研修からも探したい方はこちら

特定の行を取得する

2次元構造を持つデータから、まとまった横の並びである「行」を丸ごと取得したい場合は、一つ目のインデックスのみを指定します。特定のレコード全体を処理したいときに適した手法です。

1行分のデータをまとめて取り出す方法は、以下のコードの通りです。

data = [
    ["apple", "banana", "cherry"],
    ["dog", "cat", "bird"],
    ["red", "green", "blue"]
]

# 2行目(インデックス1)全体を取得
row = data[1]
print(row)  # ['dog', 'cat', 'bird']

上記のコードでは、変数に対して角括弧を一つだけ記述し、取得したい行の番号を指定しています。返される結果は1次元のリストとして扱われる仕様です。

行単位でのループ処理を行う際など、表形式のデータを順番に読み込む処理でよく活用されるため、CSVファイルの読み込み結果を行ごとに処理するような場面で特に有用です。

特定の列を取得する

表形式のデータにおいて、縦の並びである「列」のみを抽出するには、標準のリスト機能単体では直接指定できないため工夫が必要です。forやリスト内包表記を活用して、各行から同じ位置の値を順番に取り出します。

リスト内包表記を使って特定の列を取り出す方法は、以下のコードの通りです。

data = [
    [4, 5, 6],
    [7, 8, 9],
    [10, 11, 12]
]

# 2列目(インデックス1)をすべて取得
column = [row[1] for row in data]
print(column)  # [5, 8, 11]

上記のコードでは、リスト内包表記を用いて各行を順番に処理し、インデックス1の位置にある値を集めて新しいリストを作成しています。ループ処理の記述を短くまとめられるため、非常に効率的です。

特定の属性データだけを集計したい場合やグラフ描画のために一列分の値が必要な場面で役立つため、データ分析の前処理としても頻繁に使われる手法です。

PythonのNumPyで2次元配列の要素を取り出す方法

NumPyを活用すると、高速な数値演算(ベクトル演算)によって標準のリストよりも効率的にデータを処理できます。また、簡潔な記述でデータにアクセスできる点も副次的なメリットです。

ndarrayとは、NumPyが提供する多次元配列オブジェクトであり、同一の型かつ通常は固定サイズのデータを格納して高速な演算を実現する仕組みです。データ解析や機械学習の前処理など、大規模な数値データを扱う場面で広く使われています。

NumPyを使った具体的な取得方法は、以下の通りです。

  • スライスで範囲を指定する
  • 条件式で要素を抽出する

目的に合わせて使い分けることによって、複数データの操作が効率化されるため、扱うデータの規模や条件に応じて適切な手法を選択してください。


Python基礎・実践(Django)

企業・法人向けのPython研修では、基礎から応用まで体系的に学べます。

Python研修の詳細

DX社員研修

企業・法人向けのDX研修では、実務に繋がるリスキリングでITレベルを向上させます。

DX研修の詳細

Javaエンジニア育成研修

企業・法人向けのJavaエンジニア育成研修では、Javaの基礎から応用まで確実に習得できます。

Java研修の詳細

新卒・新入社員向け研修

企業・法人に新入社員・新卒社員に向けたプログラミング研修を提供しています。

新入社員研修の詳細

コードキャンプのIT研修を全て見る

スライスで範囲を指定する

NumPyでは、行と列それぞれの範囲をスライスで指定できます。特定の部分配列を切り出す際に便利です。

スライスを用いて複数行と複数列を取得する使い方は、以下の通りです。

import numpy as np

# 2次元配列の作成
data = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

# 1行目から2行目、1列目から2列目を取り出す
subset = data[0:2, 0:2]
print(subset)

上記のコードでは、コンマで区切って行と列のインデックスを同時に指定しています。標準の機能ではループが必要な処理も、1行で完結するのが特徴です。

なお、スライスの終端は「排他的(exclusive)」な仕様であるため、0:2は0番目と1番目のみを取り出します。3番目は含まれない点に注意が必要です。

大量のデータを扱う際にも高速に処理できるため、表形式のデータを扱う場面で役立つ手法であり、行と列の範囲を柔軟に組み合わせられる点が特長です。

条件式で要素を抽出する

NumPyでは、比較演算子を用いた条件式により、特定の条件を満たす値だけを簡潔に取得できます。これはブーリアンインデックス(boolean indexing:条件式による要素選択)と呼ばれる仕組みです。

条件式を用いて要素を抽出するコードは、次の通りです。

import numpy as np

# 2次元配列の作成
data = np.array([
    [10, 35],
    [25, 45],
    [5, 60]
])

# 30より大きい要素のみを抽出
result = data[data > 30]
print(result)  # [35 45 60]

上記のコードでは、data > 30という条件式を用いたブーリアンインデックスによって、今回の例のように同形状のブーリアンマスクを2次元配列に適用すると、条件を満たす要素を集めた1次元配列が返されます。ループ処理を書くことなく、簡潔に抽出できる点が強みです。

複数の条件を組み合わせることも可能であり、データの前処理やフィルタリングなどで重宝する手法のため、NumPyを使ったデータ解析の基本操作として覚えておくと役立ちます。

Pythonの2次元配列の要素取り出しに関するよくある質問

要素を取り出す際にIndexErrorが出る原因は何ですか?

指定したインデックスが、リストの実際の長さを超えていることが主な原因の一つです。Pythonではインデックスが0から始まるため、インデックス0〜2の要素数が3つの配列に対してインデックス3を指定すると範囲外エラーとなる仕様です。

また、負のインデックスで範囲を超えた場合(例:長さ3の配列に対してdata[-4]を指定)や空のリストに対してアクセスした場合も同様のエラーが発生します。

Pandasを使って要素を取り出すこともできますか?

はい、PandasライブラリのDataFrameを利用することによって、行や列の抽出がより柔軟に行えます。

locilocといったインデクサ(データ参照のための特殊なアクセス手段)を活用すると、ラベルや位置を指定した高度なデータ操作が可能です。

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

企業・法人向けのIT・プログラミング・生成AI研修を探す、比較する - IT・プログラミングを知って学べるコネクトメディア CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する