Python

【画像で説明】Python pandasでCSVを読み込む方法 ~ 基本編 複数要素の取得 ~【 loc / iloc 】

はじめに

無料で使えるPythonのデータ解析ライブラリ「pandas」で、CSVファイルの読み込みとデータ取得をする方法を解説します。

取得方法は大きく分けて、「単一要素の取得」と「複数要素の取得」の二つがありますが、今回は基本編その2として、「複数要素の取得」を解説します。

  1. CSVデータの読み取り
  2. 複数要素の取得 ( loc・iloc )

「単一要素の取得」については以下の記事をご覧ください。

「Pythonやpandasはよく知らない」という方にも分かるよう、なるべく丁寧に解説しています。pandasを使うと、PythonでCSVを簡単に扱うことができるので、是非ご覧ください。

環境

この記事は以下の環境で作成しています。

Python    3.9.6
pandas4.7.2
OS            Windows10                  

「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")
コード①の範囲指定のイメージ
コード①の範囲指定のイメージ
locのコード①部分の実行結果
①のコードの実行結果

②③ スライスによる範囲指定

②のコードは、行番号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")
コード②③の範囲指定のイメージ
コード①の範囲指定のイメージ
locのコード②③部分の実行結果
②③のコードの実行結果

④ 行と列を範囲指定

④のコードは、行番号・列番号の両方にスライスを使って 「始点:終点」の形で範囲指定しています。

# 0~2行目の、”name”~"color"の列を取得します・・・④
print ( df.loc[0:2,"name":"color"] )
print("\n")
コード④の範囲指定のイメージ
コード④の範囲指定のイメージ
locのコード④の部分の実行結果
④のコードの実行結果

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のコード①の部分の実行結果

②③ スライスによる範囲指定(列番号)

②③のコードは、「列番号」をカンマ・スライスにより指定するコードです。
②はカンマで、③はスライスで同じ範囲を指定しています。

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")
コード②③の範囲指定のイメージ
コード②の指定範囲のイメージ
コード③の指定範囲のイメージ
ilocのコード②③の部分の実行結果
コード②③の実行結果

④⑤ スライスによる範囲指定(行番号)

④⑤のコードは、「行番号」をカンマ・スライスにより指定するコードです。
④はカンマで、⑤はスライスで同じ範囲を指定しています。

列番号と同様に、行番号のスライス指定でも「終点のひとつ前」までが取得されます。

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")

ilocのコード④⑤の部分の実行結果
コード④⑤の実行結果

⑥ スライスによる範囲指定(行番号・列番号)

⑥は「行番号」と「列番号」の両方で、スライスにより取得範囲を指定しています。
両方指定した際も、スライスの挙動は「終点のひとつ前」です。

#「0~2行目の、列番号0~2(name,age,color)を取得します・・・⑤
print( df.iloc[0:3, 0:3] )
print("\n")

ilocのコード⑥の部分の実行結果
コード⑥の実行結果

まとめ

無料で使えるPythonのデータ解析ライブラリ「pandas」で、CSVファイルの読み込みとデータ取得をする方法のうち、複数要素を取得について解説しました。

  • 「loc」複数要素を「名称」で指定
    • カンマで要素を直接指定
    • スライスで要素を範囲指定
  • 「iloc」複数要素を「番号」で指定
    • カンマで要素を直接指定
    • スライスで要素を範囲指定 (※ 終点のひとつ前に注意)
    • 行・列両方にスライスが使える

この記事では「複数要素の取得」に絞って解説しました。「単一要素の取得」については、以下の記事をご覧ください。

pandasのインストールや環境構築など

以 下の記事で、「Windows10にpandasをインストールする方法」や、「仮想環境上(venv)でPythonを実行する方法」も解説しています。興味のある方は合わせてご覧ください。

pandasのインストール方法

仮想環境上(venv)でPythonを実行する方法

応援・要望お待ちしてます

ブログを見ていて「この辺を詳しく知りたい」「このライブラリの使い方を知りたい」「こんなことで困ってる」...etc があれば、コメント・問い合わせ・Twitterで教えてください。質問・ご要望に合わせて解説記事を作ります。

ブログを気に入っていただけたり、「応援してもいいよ」という方がいたら、ブログやSNSでの紹介をお願いします。 あたたかい応援は、中の人の更新の大きな励みになります。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です