python pandas dataframe データ参照

python

pandasのdataframeの要素の参照方法をマスターしよう

2020年5月15日

こんにちは。

 

産婦人科医で人工知能の研究をしているTommy(Twitter:@obgyntommy)です。

 

本記事ではPythonのライブラリの1つである pandas のDataFrame を用いたデータ参照方法に利用できる、様々なメソッドを学習していきます。

 

pandasの使い方については、以下の記事にまとめていますので参照してください。

 

関連記事
Python pandas 使い方
【Python】Pandasの使い方【基本から応用まで全て解説】

続きを見る

 

本記事の目標はPythonのデータフレームpandasを利用してDataFrameを用いたデータ参照をマスターする事です。

 

CSVなどのデータをDataFrameに読み込んだら、DataFrameから自由自在にデータを取得できなければ、データ解析ができません。

 

慣れ親しんでいるデータであれば、データを使用する事もそれほど困難ではありません。

 

しかし、初見の慣れ親しんでいないデータであれば、データの取得に難渋する場合があります。

 

本記事でデータを参照する方法を習得しつつ、自由自在にデータを取得できるようになりましょう。

 

PandasのDataFrameについての記事は、以下の記事にまとめていますので参照してください。

関連記事
Python pandas DataFrame 概要 作成方法 変換方法
【Python】pandas.DataFrameの概要と作成方法・変換方法

続きを見る

 

ここで本記事の学習到達目標です。

 

 本記事の学習目標

  • pandasのDataFrameで簡単なデータの参照・取得方法を修得する。
  • pandasのDataFrameから列や行を指定してデータを取得する方法を修得する。
  • pandasのDataFrameからiloc, やlocを使用してデータを取得する方法を修得する。
  • pandasのDataFrameからqueryメソッドを利用してデータを取得する方法を修得する。
  • pandasのDataFrameからループ処理を用いてデータを取得する方法を修得する。

 

では早速、学習していきましょう。

 

使用するデータを取得する

python pandas dataframe データ参照

seaborn に入っているデータ seaborn-data から、DataFrameで取得できるデータを使用して学習していきます。

 

seaborn  の公式ドキュメントは以下になります。

 

seaborn: statistical data visualization — seaborn 0.13.2 documentation
seaborn: statistical data visualization — seaborn 0.13.2 documentation

続きを見る

 

まず下記を実行して、seabornをインストールください。

 

In[]

 

今回使用するデータは、Seabornで用意されている「tips」という名称のデータに「tips」という名前を付けます。

 

下記を実行するとデータを読み込めます。

 

In[]

 

DataFrame におけるデータの参照方法には、色々な方法があります。

 

しかし基本的には DataFrameの構成である、下記の columnsindexdataを参照していくことになりますので、まずはこの方法をおさえましょう。

 

Python  pandas データ参照 DataFrameの構成であるcolumns、index、dataを示している表 

 

データの概要・基本的なデータの取得方法、参照方法を取得しよう

python pandas dataframe データ参照

データの情報を取得する方法

まずはデータの情報を取得しましょう。

 

データの情報は info メソッドで簡単に取得できます。

 

pandas.DataFrame.info の公式ドキュメントは以下になります。

 

pandas.DataFrame.info — pandas 2.2.3 documentation
pandas.DataFrame.info — pandas 2.2.3 documentation

続きを見る

 

In[]

 

Out[]

Python pandas データ参照 infoメソッドで取得したデータ情報。データ数、列名、列数、データ型を示しています。

 

データ数、列数を確認する方法

infoメソッドでも上図の様にデータ情報を取得する事ができますが、場合によって数値のデータを取得したい場合があります

 

データ数(行数)列数の取得は下記のコードで取得する事ができます。

 

In[]

 

Out[]

 

In[]

 

Out[]

 

データの最初と最後の数行を参照する方法

データの最初と最後の数行を参照する場合は、head メソッド、tail メソッドを使います。

 

pandas.DataFrame.head  、pandas.DataFrame.head  の公式ドキュメントは以下になります。

 

pandas.DataFrame.head — pandas 2.2.3 documentation
pandas.DataFrame.head — pandas 2.2.3 documentation

続きを見る

 

pandas.DataFrame.tail — pandas 2.2.3 documentation
pandas.DataFrame.tail — pandas 2.2.3 documentation

続きを見る

 

引数を何も渡さず実行すると5行取得できます。

 

In[]

 

Out[]

Python pandas データ参照 データをheadメソッドで取得した5行のデータ

 

In[]

 

Out[]

Python pandas データ参照 データをtailメソッドで取得した5行のデータ

 

取得したいデータ数を引数に渡すこともできます。

 

In[]

 

Out[]

Python pandas データ参照 データをheadメソッドに引数(7)を加えて取得した7行のデータ

 

データの統計量を参照する方法

数値データの統計量を簡単に参照することができます。

 

describeメソッドを使います。

 

pandas.DataFrame.describe の公式ドキュメントは以下になります。

 

pandas.DataFrame.describe — pandas 2.2.3 documentation
pandas.DataFrame.describe — pandas 2.2.3 documentation

続きを見る

 

In[]

 

Out[]

Python pandas データ参照 数値データの統計量をdescribeメソッドで参照した表

 

列名(columns)、行名(index)を取得する方法

たいていは、行(index)は0,1,2…なので、大事なのは列名。

 

列名を指定して、データを参照するので、列名を取得できる必要があります。

 

下記で取得できます。

 

In[]

 

Out[]

 

indexも見ておきましょう。

 

In[]

 

数値の0から244の1ずつ割り当てられているということです。

 

Out[]

 

列(columns)の型を取得する方法

列の型に応じて、数値はこの処理、カテゴリはこの処理と分けたいので、データの型も取得できるようになりましょう。

 

データの型、すなわち pandas の dtypes については以下のドキュメントを参照して下さい。

 

 

下記で取得できます。

 

In[]

 

Out[]

Python pandas データ取得 列(columns)の型 データ取得した表

 

pandasから一意の値を取得する方法

各列の値では、重複のない一意の値を取得したい場合があります。

 

ここで「一意の値」はあまり聴き慣れない言葉かもしれませんが、「一意の値」=「重複のない値」と捉えて下さい。

 

例えば、カテゴリ変数の一意の値を取得して、その値を取得して、カテゴリごとに計算する場合などです。

 

tips のカテゴリデータである、time の一意の値を取得しましょう。

 

先ほど、tips.dtype で列ごとの型を取得しましたが、そのうちカテゴリ(category)は以下の4つです。

 

そのうち time 列の一意の値を取得しましょう。

python pandas dataframe データ参照 tips.dtypeで列ごとの型を取得したうち、カテゴリ(category)の4つ

取得には、uniqueメソッドを使います。

 

In[]

 

Out[]

 

time列には DinnerLunch のデータがあることがわかります。

 

データの出現頻度の確認方法

一意の値がわかると、同様に、それぞれの数の出現頻度も気になるところです。

 

value_counts メソッドでそれぞれの出現頻度を知ることができます。

 

value_conunts の公式ドキュメントについては以下を参照にして下さい。

 

pandas.Series.value_counts — pandas 2.2.3 documentation
pandas.Series.value_counts — pandas 2.2.3 documentation

続きを見る

 

In[]

 

Out[]

 

Lunch のデータ数の方が少ないですね。

 

これで、Lunch が10だと統計量を算出しても、信頼できる値にはならないでしょう。

 

今回は大丈夫そうです。

 

参照するデータを並び替える方法

並べ替える方法も見ていきましょう。

 

並び替えは、sort_valuesメソッドでできます。

 

sort_values メソッドの公式ドキュメントは以下になります。

 

pandas.DataFrame.sort_values — pandas 2.2.3 documentation
pandas.DataFrame.sort_values — pandas 2.2.3 documentation

続きを見る

 

引数に列名とascendingで昇順(True)、降順(False)を渡します。

 

total_bills を昇順で並び替えてみましょう。並び替えたものは tips_sort にいれています。

 

In[]

 

head メソッドを使用すると、total_billの列が並び替えれていることがわかります。

 

In[]

 

Out[]

Python pandas headとtailを見ると、total_billの列が並び替えれていることが示されている表

 

tail メソッドを使用すると、total_billの列が並び替えれていることがわかります。

 

In[]

 

Out[]

Python pandas tailメソッドで、total_billの列が並び替えれていることが示されている表

 

 

データを取得する方法

python pandas dataframe データ参照

必要なデータをしっかり取得できるようになりましょう。

 

列(columns)を指定してデータを取得する方法

下図の青枠のように列単位でデータを取得してみましょう。

Python pandas データ参照 列単位で表からデータを取得をしている事を示している図

ここで、列単位でデータを取得する際に、1列を取得するのか、複数列を取得するのかで方法が異なってきます。

 

各々についてのデータ参照の方法について確認していきましょう。

 

1列のみを参照する方法

1列の行(column)のみを参照する方法は、tips の後に[‘列名’] を記載するだけです。

 

それでは、表のうちのtotal_bill 列のみを取得します。

 

In[]

 

Out[]

 

複数列を参照する方法

複数列を参照する場合、[[‘列名1’, ‘列名2’, ‘列名3’]] と列名をリストで渡します。

 

複数列を参照する場合、[] が一つ多くなります。

 

In[]

 

Out[]

python pandas dataframe データ参照 複数列のデータ参照の場合に、[[‘列名1’, ‘列名2’, ‘列名3’]]と列名をリストで渡した事を示す表

 

 

表の行(index)のみを指定してデータを取得する方法

図の青枠のように表のうち行単位でデータを取得する方法を学習しましょう。

 

In[]

python pandas dataframe データ参照 表のうち行単位でデータを取得する方法

行単位でデータを取得する方法numpy と同じく、[開始行:終了行] で取得できます。

 

numpyについては以下の記事で復習しましょう。

関連記事
Numpy 入門 Python
NumPyの入門【基礎から解説】

続きを見る

 

注意ポイント

  • 表から行単位のデータを取得する場合には、numpy と違い、1行でも、[開始行:終了行]の指定が必要です。
  • 終了行で指定した行の1つ手前までの行を取得します。
  • 行数は0から数える事にも注意です。

 

では早速、表のうち1行のみのデータを取得してみましょう。

 

In[]

 

Out[]

python pandas dataframe データ参照 行を指定して、行単位でデータを取得下結果の表

 

次に、表のうち5行目から9行目のデータを取得してみましょう。

 

In[]

 

Out[]

python pandas dataframe データ参照 5行〜10行までを指定して、データを取得した結果の表

 

 

iloc, locを使って取得するデータを指定する方法

iloclocを使うと、自由に行と列を組み合わせてデータを取得する事が可能になります。

 

iloc とloc の違いは以下の図の様になります。

  • iloc行列の番号で指定
  • loc行列のラベルで指定

python pandas dataframe データ参照 表のうち、columsとindexを示して行指定、列指定が何を表しているのかを示している図表

 

iloc

ilocinteger-locationの略で「数値で場所を指定する」ということを意味します。

 

iloc[行、列] で指定することができ、列は省略が可能です。

 

行、列の指定にはコードとしては「:」を使います。

 

普段5行10行という風に使用する様な、「」と捉えて頂ければOKです。

 

例えば、下記のような使い方です。

 

[3]3行目
*列を省略
[:3]0〜2(3手前まで)行
*列を省略
[1:5]1〜4行
*列を省略
[:, 3]全行、2列目
[:, :2]全行、0-1列
[:, 2:]全行、2列以降
[:10, 1:4]0-9行、1-3列
[:100, :]0-99行、全列
[10:, :]10行以降、全列

 

上記の表のうち、行列を指定してデータを取得する方法についていくつか試してみましょう。

 

まずは3行目のデータを取得してみましょう。

 

In[]

 

Out[]

python pandas dataframe データ参照 ilocを使用して行列(3行目)を指定してデータを取得下結果の表

 

 

次に、0-9行、1-3列のデータを取得してみましょう。

 

In[]

 

Out[]

python pandas dataframe データ参照 ilocを使用して行列(0-9行、1-3列を取得)を指定してデータを取得下結果の表

 

 

loc

locではデータを参照する際に、列、行名で指定します。

 

コードを記載する方法としては loc[行名, 列名] もしくは、loc[True/Falseのlist] で指定する事ができます。

 

True/Flaseiloc でも使用できます。

 

まず、取得したいデータを行名列名で指定してみましょう。

 

例として、行名が 0, 2, 4, 6 で、かつ列名が tip, sex, smoker を選択してみます。

 

*行(index) は数値なので、 で囲う必要はありません。ただし、文字列なら列名のように で囲って指定する必要がある事に注意です。

 

loc iloc のTrue/False の使い方について

loc, iloc は通常ラベルもしくは番号で指定しますが、両者の共通指定方法として True/Flase で指定する事も可能です。

例えば、下記は4つ全部同じデータを取得できます。

最後の2つは特に、ラベルでも番号指定でもなく True/False で指定しています。

loc、iloc両方で True/False  が使う事が出来ているのが分かると思います。

 

 

 

In[]

 

Out[]

python pandas dataframe データ参照 locを使用して、行名が0, 2, 4, 6の列名tip, sex, smokerを選択を指定してデータを取得した結果の表

 

True/False による指定をみていきましょう。

 

偶数列をTrue 、奇数列を False となるリストを内包表記で作ってみましょう。

 

「内包表記の仕方を忘れてしまった」という方は、【python入門】list(リスト)の使い方の総まとめ【後編】の『内包表記』
の箇所を参照にしてください。

 

In[]

 

このコードの書き方を、loc で指定して行いましょう。

 

参照列の指定は行われず、全列のデータを参照出来る様に取得しましょう。。

 

In[]

 

上記のコードでは、偶数が True となるように取得する行のリストを作りました。

 

その他の方法として、各列の値を、「tip 列が2以上という条件」を指定して取得することも可能です。

 

tip 列が2以上という条件を作ってみます。

 

In[]

 

Out[]

python pandas dataframe データ参照 tip 列が2以上という条件を作った表

 

これを loc で指定することで、tip が2以上の行だけを取得することができます。

 

In[]

 

 

わかりやすさのためにコード分けましたが、通常は、下記のように1行のコードにします。

 

In[]

 

&(and)|(or) で複数条件も指定可能です。

 

注意ポイント

下記のコード例のような、if文の条件式で使う andor ではないので注意が必要です。

In[]

pandas の条件式では、下記のコードのように「&」や「|」を使います。

 

In[]

 

Out[]

python pandas dataframe データ参照

 

全列を対象にしてきましたが、全列を指定する場合は、loc を省略しても同じです。

 

In[]

 

loc を使うと、列も指定できるという違いがあります。

 

全列を対象にする場合は、locを使わない方法をよく使います。

 

queryメソッドを使用してデータを取得する方法

queryメソッドでも、参照したいデータの行列の条件を指定する事でデータを取得できます。

 

queryメソッドの場合には、条件の指定の仕方は、文字列で表現するので、いくつか紹介します。

 

tip>=2tipが2以上
not tip>=2tipが2以上でないもの
2<=tip<4tipが2以上、4未満
sex==”male”sexがmale
sex!=”male”sexがmaleでないもの
day in [“Sun”, “Fri”]dayがSunとFriのもの
day not in [“Sun”, “Fri”]dayがSunとFri以外のもの

 

 

query メソッドを利用して、いくつか例としてコードの記載を試してみましょう。

 

まずは、tipsのcolums の tip が2以上かつ、4未満のものについて見ていきましょう。

 

In[]

 

Out[]

python pandas dataframe データ参照 tipのcolumsに記載されている値 が2以上かつ、4未満のものを参照している表

 

次にtipのcolums  の day のうち、 SunFri のものについて見ていきましょう。

 

 

In[]

 

 

Out[]

python pandas dataframe データ参照 tipのcolumsに記載されているうち、day が Sun と Fri を示した表

 

如何でしょうか。

 

その他にも、上記のqueryメソッドの場合に条件の指定の仕方によって、文字列を指定して表現できる表の表し方が多くありますので、色々と試してみましょう。

 

型を指定してデータを取得する方法

データを取得したい表によっては数値の列だけの場合や、カテゴリの列だけの場合があります。

 

その様な表の場合に、数値やカテゴリーの型によってデータを取得したい場合があります。

 

その場合は、select_dtypes が有用です。pandas.DataFrame.select_dtypes の公式ドキュメントは以下の様になります。

 

pandas.DataFrame.select_dtypes — pandas 2.2.3 documentation
pandas.DataFrame.select_dtypes — pandas 2.2.3 documentation

続きを見る

 

まず再度、tips のデータの型を確認してみましょう。

 

In[]

 

 

Out[]

python pandas dataframe データ参照python pandas dataframe データ参照 select_dtypesを使います。 再度、tipsのデータの型を確認しましょう。

 

select_dtypes を使い方

  • 引数に、include=型 で対象の型の列を指定
  • 引数に、exclued=型 で対象の型の列の列以外を指定

型について 

pandasの型には下記の表のものがあります。

 

列番号や、ラベルではなくこれらの型うちから参照していきます。

 

説明
objectテキストまたは数値と非数値の混合
bool真偽
int6464ビット符号付き整数
float6464ビット浮動小数点
datetime64日時
category有限のテキストリスト

 

category列の取得

まず、category の列を指定してデータを参照してみましょう。

 

型の category  を指定すると、category 型の列全てを参照できます。

python pandas dataframe データ参照 categoryの列を示している表

 

In[]

 

 

Out[]

python pandas dataframe データ参照 select_dtypesメソッドでcategoryの列を指定して得た表

次に、数値である int64float64 を指定します。

 

In[]

 

number を指定して、表から数値のみで抽出してデータの取得を行う事ができます。

 

In[]

 

 

Out[]

python pandas dataframe データ参照 select_dtypesメソッドを用いて表からnumbersのみを抽出した表

 

tips のデータはカテゴリの列以外は数値なので、exclude を使っても同じ結果が得られます。

 

繰り返しになりますが、「exclued=型」のコードを記載する事で対象の型の列以外が選択できます。

 

試しに下記コードを実行してみてください

 

In[]

 

Out[]

python pandas dataframe データ参照 select_dtypesメソッドを用いて表からnumbersのみを抽出した表

 

ループ処理でデータを取得する方法

最後に、ループ処理で順番にデータを取得する方法についてです。

 

ループは列方向か、行方向でループをします。具体的には以下の図の様なイメージです。

 

 

 ループ処理で列方向でデータを取得するイメージ

python pandas dataframe データ参照 ループ処理で列方向でデータを取得するイメージ

 ループ処理で行方向でデータを取得するイメージ

 

python pandas dataframe データ参照 ループ処理で行方向でデータを取得するイメージ

それでは、各々の取得方法について具体的なメソッド iteritemsメソッド を用いて学習していきましょう。

 

ループ処理で列方向にデータを取得する方法

列方向へのループは iteritems メソッドを使います。イメージ図は以下です。

python pandas dataframe データ参照 ループ処理で列方向でデータを取得するイメージ

pandas.DataFrame.iteritems の公式ドキュメントは以下になります。

 

 

使い方は、次のようになります。

 

1列ずつ処理され、col_name に列名、col に1列分のデータが取得できます。

 

In[]

 

1列ずつ処理され、col_name に列名が取得できます。

 

col  には、1列分のデータが取得できます。

python pandas dataframe データ参照 forループで1列ずつ処理され、col_nameに列名が取得される様子

実際に使ってみましょう。

 

In[]

 

Out[]

 

列でループすることはあまりなく、次の行のループの方がよく使います。

 

ループ処理で行方向にデータを取得する方法

行方向のループは、itterrowsメソッドを使います。イメージ図は以下です。

python pandas dataframe データ参照 ループ処理で行方向でデータを取得するイメージ

itterrowsメソッドの公式ドキュメントは以下になります。

 

pandas.DataFrame.iterrows — pandas 2.2.3 documentation
pandas.DataFrame.iterrows — pandas 2.2.3 documentation

続きを見る

 

使い方は、次のようになります。

 

In[]

 

indindex の行名、今回だと 0,1,2,… が取得されます。

 

row には行のデータが入ります。

 

python pandas dataframe データ参照  ind に index の行名、今回だと 0,1,2,… が取得されており、row には行のデータが入る様子を示している

実際に使ってみましょう。

 

In[]

 

Out[]

 

今回は以上となります。

 

pandas の使用方法については以下の記事にまとめています。一通り本記事でpandasで Excelを使用する方法を学習できた方は再度復習してみましょう。

関連記事
Python pandas 使い方
【Python】Pandasの使い方【基本から応用まで全て解説】

続きを見る

 

また、PandasのDataFrameについての詳しい記事は、以下の記事にまとめていますので参照してください。

関連記事
Python pandas DataFrame 概要 作成方法 変換方法
【Python】pandas.DataFrameの概要と作成方法・変換方法

続きを見る

 

 

 

人気記事 【入門から上級レベルまで】人工知能・機械学習の独学におすすめの本25選

人気記事 無料あり:機械学習エンジニアの僕がおすすめするAI(機械学習)特化型プログラミングスクール3社


-python
-, , ,

Copyright© Tommy blog  , 2024 All Rights Reserved.