※この記事にはプロモーションが含まれています。

18. Pandasでデータ分析

Pandas DataFrameの参照(単一インデックス)

更新日:

DataFrameに格納されたデータを取得する方法を確認していきましょう。まずこの章では、1つのインデックスが設定されたDataFrameに対しての検索方法を見ていきます。

 

動画教材紹介私(清水 義孝)が作成したコース「Pythonによるビジネスに役立つWebスクレイピング」(Udemyへのリンク)が発売中!
発売数9,000本突破を記念して、今だけ期間限定で87%オフの大セール中!!!

CSVファイルの読み込み

まず初めに次の情報を保持したCSVファイルを読み込みます。実際にビジネスで利用される売上情報(ヘッダ)のイメージになります。
 
後から読み込みますが、売上明細の情報は別途あり、そこに商品、数量、単価、金額などの情報が格納されています。
 
このヘッダ情報には、Sales_Noとして売上伝票毎にAから始まる番号の連番が、Sales_dateには売上日が、Customer_IDには顧客IDが、Sales_Orgには販売組織IDが設定されています。顧客IDや販売組織IDは、別途マスタデータがあり、IDと共に名称などの情報を持っています。

Sales_NoSales_DateCustomer_IDSales_Org
A0012018/6/22C03Q01
A0022018/6/23C14Q02
A0032018/6/24C30Q01
A0042018/6/25C01Q03
A0052018/6/26C01Q01
A0062018/6/27C02Q03
A0072018/6/28C02Q01
A0082018/7/5C03Q02
A0092018/7/24C04Q01
A0102018/7/12C04Q01

 
それでは、CSVファイル「T_Sales_Header.csv」からデータを読み込みます。(※CSVファイルは左のリンクから取得してください。)合わせてインデックスも指定します。
 
CSVファイルの読み込みは、後の章で詳しく説明しますがpd.read_csvを利用します。その際に引数として読み込むファイル名「T_Sales_Header.csv」とインデックスに列「Sales_No」を指定します。この読み込んだデータをDataFrameとして変数df_salesに格納します。

In [1]: import pandas as pd
...: df_sales = pd.read_csv("T_Sales_Header.csv", index_col = ["Sales_No"])

 
そして次にDataFrameを格納した変数df_salesを入力すると、格納されているデータが表示されました。

In [2]: df_sales
Out[2]:

 
 
 
 
 
 
 
 
 
 
 

画面上部に表示されているのが、列名になります。”Sales_No”は一段下に表示されています。これはインデックスに指定されていることを示しています。
 
 

先頭、最後から行数指定での抽出

先ほどの例のように、全てのデータを表示するのは、データ件数が多くなると見づらくなります。多くの場合、一部のデータを確認すれば十分です。
 
そのような場合、DataFrameに格納したデータの内、最初の数行や最後の数行を表示して、確認していきます。DataFrameのデータの内、最初から指定した行数を表示するには、headを利用します。
 
引数では行数を指定し、head(行数)のように記述します。引数を省略した場合、最初の5行が表示されます。

In [3]: df_sales.head()
Out[3]:

 
 
 
 
 
 

 
次にheadの引数に3を指定し、最初の3行を表示してみます。

In [4]: df_sales.head(3)
Out[4]:

 
 
 
 

 
先ほどは先頭行から指定行数を表示しましたが、逆に最後から指定した行数を表示するには、tailを利用します。
 
引数では行数を指定し、tail(行数)のように記述します。引数を省略した場合、最後の5行が表示されます。

In [5]: df_sales.tail()
Out[5]:

 
 
 
 
 
 

 
 

動画教材紹介私(清水 義孝)が作成したコース「Pythonによるビジネスに役立つWebスクレイピング」(Udemyへのリンク)が発売中!
発売数9,000本突破を記念して、今だけ期間限定で87%オフの大セール中!!!

指定行・指定列の抽出

DataFrameのデータ抽出は、行番号、インデックスや列名を指定して行なうことができます。但し、複数の行と列を同時に指定してデータの抽出ができないなどの制限がありますので、後述するloc、ilocを利用することも多いです。
 
まずは列名を指定して、列”Customer_ID”の情報を表示してみましょう。

In [6]: df_sales["Customer_ID"]
Out[6]:

 
 
 
 
 
 
 

 
次にインデックスA003行の全ての列の情報を抽出します。

In [7]: df_sales["A003":"A003"]
Out[7]:

 
 
 

 
今度はインデックスの範囲を指定して、ある範囲の行を抽出します。A003~A006行までを抽出します。

In [8]: df_sales["A003":"A006"]
Out[8]:

 
 
 
 
 

 
また行番号を指定して、ある範囲の行を抽出することもできます。同様にA003~A006行までを抽出します。
 
行番号での基本的な指定方法は次のようになります。

[開始値:終了値]

行番号は1行目から0で始まります。範囲には終了値に指定された値は含まれず、終了値-1までになります。また開始値、終了値を省略することができ、開始値が省略された場合は0番目からの指定となり、終了値が省略された場合は最後までの指定になります。
 
従って3行目のA003から6行目のA006までの指定は、[2:6]となります。つまり1行目から0で始まりますので、開始値は3行目の2となり、終了値-1までになりますので、終了値は7行目の6となります。

In [9]: df_sales[2:6]
Out[9]:

 
 
 
 
 

 
 

ilocによる行・列番号を指定しての抽出

ilocを利用するとDataFrameから行・列番号を指定してデータを抽出することができ、加えて、スライシングも使うことができます。
 
まずは行を指定してデータの抽出をしてみましょう。行番号は0から始まります。2行目のデータを抽出する場合、次のようにilocに引数1を渡します。

In [10]: df_sales.iloc[1]
Out[10]:

 
 
 

 
次に4行目から6行目を抽出します。その場合、ilocに引数3:6を渡します。

In [11]: df_sales.iloc[3:6]
Out[11]:

 
 
 
 
 

 
次に列を指定してデータを抽出します。こちらも列番号は0から始まります。全ての行の2列目の”Customer_ID”の値を取得する場合、行の指定を”:”(全行)、列の指定を1(2列目)とします。

In [12]: df_sales.iloc[:, 1]
Out[12]:

 
 
 
 
 
 
 

 
次のようなかたちで、行の範囲、列の範囲を指定して抽出することもできます。2~3行目の1~2列目のデータを抽出します。

In [13]: df_sales.iloc[1:3, 0:2]
Out[13]:

 
 
 

 
さらには、先ほどの例のように1~2列目というように連続した列では無く、1、3列目というように飛び飛びの列を指定したい場合は、[0,2]というように、[ ]括弧の中に指定したい列をカンマを挟んで記述します。

In [14]: df_sales.iloc[1:3,[0,2]]
Out[14]:

 
 
 

 
 

動画教材紹介私(清水 義孝)が作成したコース「Pythonによるビジネスに役立つWebスクレイピング」(Udemyへのリンク)が発売中!
発売数9,000本突破を記念して、今だけ期間限定で87%オフの大セール中!!!

locによる行・列名を指定しての抽出

locを利用するとDataFrameからインデックス、列名を指定してデータを抽出することができます。スライシングも使うことができます。
 
まずはインデックスを指定してデータの抽出をしてみましょう。A003~A007行のデータを抽出する場合、次のようにlocに引数"A003":"A007"を渡します。

In [15]: df_sales.loc["A003":"A007"]
Out[15]:

 
 
 
 
 
 

 
次に列を指定してデータを抽出します。全ての行の列”Customer_ID”の値を取得する場合、行の指定を”:”(全行)、列の指定を”Customer_ID”とします。

In [16]: df_sales.loc[:,"Customer_ID"]
Out[16]:

 
 
 
 
 
 
 

 
次のようなかたちで、行の範囲、列の範囲を指定して抽出することもできます。A002~A003行目の列”Customer_ID”、 "Sales_Org"のデータを抽出します。

In [17]: df_sales.loc["A003":"A007",["Customer_ID","Sales_Org"]]
Out[17]:

 
 
 
 
 
 

 
 
関連記事です。
Pandasの中心となるDataFrame(データフレーム)については、次の記事で詳しく解説しております。

 

 
 
 
最後に...


Pythonの学習においては、実際に様々なプログラムを書いて試していくことが非常に重要です。Pythonについて、さらに詳しく学ばれたい方は、以下の私のUdemy講座をご検討いただければ幸いです。


Pythonを用いて世界中のWebサイトから自動的にデータ収集する方法を、基礎からていねいに学ぶことができます。Pythonを初めて学ばれた方も、最初に取り組みやすい内容になっています。


>> Pythonによるビジネスに役立つWebスクレイピング
発売数9,000本突破を記念して大セール中!期間限定になりますのでお早めに。
Pythonによるビジネスに役立つWebスクレイピング(BeautifulSoup、Selenium、Requests)講座の画面

既に9,000名以上の方に受講頂き、大変好評です。またコースに満足いただけない場合でも、30日返金保証があるので安心です。

期間限定の割引クーポンは、こちらから!
>> Pythonによるビジネスに役立つWebスクレイピング
   
   





-18. Pandasでデータ分析

Copyright© ビジPy , 2024 All Rights Reserved.