はじめに
無料で使えるPythonのデータ解析ライブラリ「pandas」で、CSVファイルの読み込みとデータ取得をする方法を解説します。
取得方法は大きく分けて、「単一要素の取得」と「複数要素の取得」の二つがありますが、今回は基本編その2として、「複数要素の取得」を解説します。
- CSVデータの読み取り
- 複数要素の取得 ( loc・iloc )
「単一要素の取得」については以下の記事をご覧ください。
「Pythonやpandasはよく知らない」という方にも分かるよう、なるべく丁寧に解説しています。pandasを使うと、PythonでCSVを簡単に扱うことができるので、是非ご覧ください。

環境
この記事は以下の環境で作成しています。
環境 | バージョンなど |
Python | 3.9.6 |
pandas | 4.7.2 |
OS | Wiindows10 |
pandasのインストール
「pandasのインストールから知りたい」という方は、先に以下の記事をご覧ください。インストールには5分もかかりません。
CSVファイル
以下のCSVファイルはを使用します。
見づらいので以降の説明では表計算ソフトで表示した内容を使います。
※ 下記のCSVデータは、Pythonファイルと同じフォルダに保存してください。
name,age,color,flag
taro,1,Red,true
jiro,11,Blue,true
saburo,21,Green,false

CSVファイルはスペースを入れずに使用してください。コードの簡単化のため、あえてシンプルな(見づらい)データを使用しています。
実行結果
CSVファイルを読み込んで、複数要素を取得するコードの実行結果です。表示量が多いため、冒頭コードの結果のみを示します。詳細は「コードのポイント」をご覧ください。

全体コード
CSVファイルを読み込んで、複数要素を取得するコードです。pandasの「loc」「iloc」プロパティを使用します。 具体的な引数の解説を、画像を使って「コードのポイント」で説明しています。詳細は後述の内容をご覧ください。
「loc・iloc」は要素名称(番号)で、Seriesのデータへアクセスするプロパティです、[]で指定します。 「iあり」は番号、「iなし」は名称指定に使用します。
プロパティの説明や効能などはやや難しくなるので、ここでは「データへアクセスするための、特別な変数のようなもの」として見てください。
import pandas as pd
# csvファイルを読み込みます
df = pd.read_csv("data.csv")
# 読み込んだCSVのデータを表示します
print(df)
print("\n")
print(" --- locの使い方のコードです --- \n" )
# 0行目の、”name”,"age"の列を取得します・・・①
print ( df.loc[0, ["name","age"] ])
print("\n")
# 0行目の、”name”,"age","color"の列を取得します・・・②
print ( df.loc[0, ["name","age","color"] ])
print("\n")
# 0行目の、”name”~"color"の列を取得します・・・③
print ( df.loc[0, "name":"color" ])
print("\n")
# 0~2行目の、”name”~"color"の列を取得します・・・④
print ( df.loc[0:2,"name":"color"] )
print("\n")
print(" --- ilocで、列番号を指定するコードです --- \n" )
# 0行目の、「列番号0(name,age)」を取得します・・・①
print( df.iloc[0,[0,1] ])
print("\n\n")
# 0行目の、「列番号0,1,2(name,age,color)」を取得します・・・②
print( df.iloc[0, [0,1,2] ] )
print("\n")
#
# 0行目の、「列番号0,1,2(name,age,color)」を取得します・・・③
# コロンで指定した場合、”前まで” が取得されるので注意です
#
print( df.iloc[0, 0:3] )
print("\n")
print(" --- ilocで、行番号を指定するコードです --- \n" )
#「0と1行目」の、列番号0(name)を取得します・・・④
print( df.iloc[ [0,1,2], 0] )
print("\n")
#
#「0,1,2行目の、列番号0(name)を取得します・・・⑤
# コロンで指定した場合、行番号も ”後ろの番号の一つ前まで” が取得されるので注意です
#
print( df.iloc[0:3, 0] )
print("\n")
#「0~2行目の、列番号0~2(name,age,color)を取得します・・・⑤
print( df.iloc[0:3, 0:3] )
print("\n")
コード中の「\n」は改行を表示するための記号(エスケープシーケンス)です。
実行結果を見やすくするために記載しています。
コードのポイント
コードのポイントは以下の通りです。解説を「コード」「実行結果」「範囲指定のイメージ図」の3つで説明します。
locプロパティの使い方
「locプロパティ」では「名称」を指定して複数要素を取得できます。①~④のコードを詳しく解説します。
print(" --- locの使い方のコードです --- \n" )
# 0行目の、”name”,"age"の列を取得します・・・①
print ( df.loc[0, ["name","age"] ])
print("\n")
# 0行目の、”name”,"age","color"の列を取得します・・・②
print ( df.loc[0, ["name","age","color"] ])
print("\n")
# 0行目の、”name”~"color"の列を取得します・・・③
print ( df.loc[0, "name":"color" ])
print("\n")
# 0~2行目の、”name”~"color"の列を取得します・・・④
print ( df.loc[0:2,"name":"color"] )
print("\n")
① カンマによる直接指定
①のコードは、「行番号0、列名称[name,age]を直接指定するコードです。
print(" --- locの使い方のコードです --- \n" )
# 0行目の、”name”,"age"の列を取得します・・・①
print ( df.loc[0, ["name","age"] ])
print("\n")


②③ スライスによる範囲指定
②のコードは、行番号0, 列名称(name,age,color)を「カンマで直接指定」しています。
③のコードは、同じ指定を「スライス」を使って「始点:終点」の形式で範囲指定しています。
# 0行目の、”name”,"age","color"の列を取得します・・・②
print ( df.loc[0, ["name","age","color"] ])
print("\n")
# 0行目の、”name”~"color"の列を取得します・・・③
print ( df.loc[0, "name":"color" ])
print("\n")


④ 行と列を範囲指定
④のコードは、行番号・列番号の両方にスライスを使って 「始点:終点」の形で範囲指定しています。
# 0~2行目の、”name”~"color"の列を取得します・・・④
print ( df.loc[0:2,"name":"color"] )
print("\n")

ilocプロパティの使い方
ilocプロパティでは「番号」を指定して複数要素を取得します。以下の①~⑥のコードを詳しく解説します。
スライスで範囲を指定した際の挙動が、loc関数と大きく異なるので注意が必要です(後述します)。
print(" --- ilocで、列番号を指定するコードです --- \n" )
# 0行目の、「列番号0(name,age)」を取得します・・・①
print( df.iloc[0,[0,1] ])
print("\n")
# 0行目の、「列番号0,1,2(name,age,color)」を取得します・・・②
print( df.iloc[0, [0,1,2] ] )
print("\n")
#
# 0行目の、「列番号0,1,2(name,age,color)」を取得します・・・③
# コロンで指定した場合、”終点のひとつ前まで” が取得されます
#
print( df.iloc[0, 0:3] )
print("\n")
print(" --- ilocで、行番号を指定するコードです --- \n" )
#「0と1行目」の、列番号0(name)を取得します・・・④
print( df.iloc[ [0,1,2], 0] )
print("\n")
#
#「0,1,2行目の、列番号0(name)を取得します・・・⑤
# コロンで指定した場合、”終点のひとつ前まで” が取得されます
#
print( df.iloc[0:3, 0] )
print("\n")
#「0~2行目の、列番号0~2(name,age,color)を取得します・・・⑤
print( df.iloc[0:3, 0:3] )
print("\n")
① カンマによる直接指定
①のコードでは、行番号0, 列番号(0,1)を直接指定しています。
print(" --- ilocで、列番号を指定するコードです --- \n" )
# 0行目の、「列番号0(name,age)」を取得します・・・①
print( df.iloc[0,[0,1] ])
print("\n")


②③ スライスによる範囲指定(列番号)
②③のコードは、「列番号」をカンマ・スライスにより指定するコードです。
②はカンマで、③はスライスで同じ範囲を指定しています。
「ilocプロパティ」でスライスを使った場合、「終点のひとつ前まで範囲」が取得されます。
③のコードでは[0:3]までを指定していますが、 ②の場合と同じ1~2までの範囲が取得されています。
# 0行目の、「列番号0,1,2(name,age,color)」を取得します・・・②
print( df.iloc[0, [0,1,2] ] )
print("\n")
#
# 0行目の、「列番号0,1,2(name,age,color)」を取得します・・・③
# コロンで指定した場合、”終点のひとつ前まで” が取得されるので注意です
#
print( df.iloc[0, 0:3] )
print("\n")



④⑤ スライスによる範囲指定(行番号)
④⑤のコードは、「行番号」をカンマ・スライスにより指定するコードです。
④はカンマで、⑤はスライスで同じ範囲を指定しています。
列番号と同様に、行番号のスライス指定でも「終点のひとつ前」までが取得されます。
print(" --- ilocで、行番号を指定するコードです --- \n" )
#「0と1行目」の、列番号0(name)を取得します・・・④
print( df.iloc[ [0,1,2], 0] )
print("\n")
#
#「0,1,2行目の、列番号0(name)を取得します・・・⑤
# コロンで指定した場合、行番号も ”後ろの番号の一つ前まで” が取得されるので注意です
#
print( df.iloc[0:3, 0] )
print("\n")

⑥ スライスによる範囲指定(行番号・列番号)
⑥は「行番号」と「列番号」の両方で、スライスにより取得範囲を指定しています。
両方指定した際も、スライスの挙動は「終点のひとつ前」です。
#「0~2行目の、列番号0~2(name,age,color)を取得します・・・⑤
print( df.iloc[0:3, 0:3] )
print("\n")

まとめ
無料で使えるPythonのデータ解析ライブラリ「pandas」で、CSVファイルの読み込みとデータ取得をする方法のうち、複数要素を取得について解説しました。
- 「loc」複数要素を「名称」で指定
- カンマで要素を直接指定
- スライスで要素を範囲指定
- 「iloc」複数要素を「番号」で指定
- カンマで要素を直接指定
- スライスで要素を範囲指定 (※ 終点のひとつ前に注意)
- 行・列両方にスライスが使える
この記事では「複数要素の取得」に絞って解説しました。「単一要素の取得」については、以下の記事をご覧ください。
お知らせ
3月号の『日経ソフトウェア』はPythonの特集。穴埋め式クイズで学ぶPython入門や、PythonでExcelを動かす方法などが特集されています。

pandasのインストールや環境構築を解説
以 下の記事で、「Windows10にpandasをインストールする方法」や、「仮想環境上(venv)でPythonを実行する方法」も解説しています。興味のある方は合わせてご覧ください。
pandasのインストール方法
仮想環境上(venv)でPythonを実行する方法
質問・要望 大歓迎です
「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。
使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。