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の解析やゲームの盤面管理など幅広い用途に対応しています。
特定の行を取得する
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を使った具体的な取得方法は、以下の通りです。
- スライスで範囲を指定する
- 条件式で要素を抽出する
目的に合わせて使い分けることによって、複数データの操作が効率化されるため、扱うデータの規模や条件に応じて適切な手法を選択してください。
スライスで範囲を指定する
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を利用することによって、行や列の抽出がより柔軟に行えます。
locやilocといったインデクサ(データ参照のための特殊なアクセス手段)を活用すると、ラベルや位置を指定した高度なデータ操作が可能です。
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
ITやプログラミングに関するコラム
PythonをWebで実行する方法
共通テスト「情報Ⅰ」2年目で変わる、日本の教育と学び方
gitでブランチ(branch)を切り替える方法
git cloneでブランチを指定する方法
64GBのメモリが必要な人・不要な人の特徴
PCを再起動するコマンド一覧
CapsLock以外で大文字になる原因【Windows編】
パソコンで大文字になるのを解除する方法
面白いAIの活用事例を業界別に紹介
Gitでcommit(コミット)を取り消す方法
ITやプログラミングに関するニュース
株式会社HODL1がAI経営管理エージェントを提供開始、少人数での経営管理効率化を支援
株式会社サードスコープがKanataを発表、法人向けAI業務支援SaaSを展開
株式会社ナレッジセンスがChatSenseのPPTX出力機能を強化、資料修正負荷の軽減を支援
株式会社すららネットが「すらら」同時導入を公表、夜間中学で日本語学習と教科学習を支援
DUAL株式会社が空室通電DXと賃貸革命の連携を開始、空室時の通電管理効率化を推進
株式会社ITLINEがAWS生成AIシステム開発・運用を提供開始、企業管理型AI基盤の構築を支援
合同会社ウノマスがAI対応スコアを正式公開、LLMOとSEOの横断診断を支援
Markefan株式会社がmarke.aiを提供開始、BtoBマーケティングの属人化抑制を支援
株式会社FinatextがAIロールプレイング提供開始、金融機関の営業育成基盤構築を支援
株式会社アンドパッドがANDPAD ナレッジAIを提供開始、建設現場の情報検索と共有を支援
