詳細はパンdasでDataFrameオブジェクトの.loc[],.iloc[]を利用してデータを抽出します。


pandsのDataFrameオブジェクトは、本質的に二次元マトリックスであり、従来の二次元マトリックスとの違いは、前者が各行と各列の名称を追加的に指定していることにある。このように内部データ抽出は、「行列名(対応.loc[]方法)」ともいい、「マトリックス下付き(対応.iloc[]方法)」ともいいます。
以下、具体的に説明します。
(以下の手順は全部Jupyter notebookで行います。一部の語句のprint()関数は省略します。)
まず、DataFrameオブジェクトを生成します。

import pandas as pd
score = [[34,67,87],[68,98,58],[75,73,86],[94,59,81]]
name = ['  ','  ','  ']
course = ['  ','  ','  ','  ']
mydata1 = pd.DataFrame(data=score,columns=name,index=course)#    (index)   (columns)
print(mydata1)
mydata2 = pd.DataFrame(score)#      ,    0,1,2……
print(mydata2)

#     
          
   34 67 87
   68 98 58
   75 73 86
   94 59 81
#       
  0  1  2 (    )
0 34 67 87
1 68 98 58
2 75 73 86
3 94 59 81
DataFrameオブジェクトの生成にはdataパラメータを指定する必要がありますが、ユーザーはまた、2つのパラメータcolumns(列名)とindex(行名、ここのindexは数字だけでなく、ユーザーが指定した任意のデータタイプ、例えばアルファベット)を指定できます。指定しないと、行列名はデフォルトで0、1、2…。
下の図は前の状況を説明しています。

DataFrameオブジェクトの.loc[]と.iloc[]の方法は、データを抽出するために使用されます。
  • .loc[]:locationであり、columnsとindexをパラメータとしています。
  • .iloc[]:index locationであり、二次元マトリックスの位置指標(すなわち0,1,2...)をパラメータとしている。
  • loc[]文法
    loc[行ラベルの署名/[行ラベルの署名リスト]と、ラベルの署名/[列标の署名リスト]という2つの入力パラメータがあります。最初の指定行名、2番目の指定列名です。パラメータが一つしかない場合、デフォルトは行名(つまり行全体を抽出)で、すべての列が選択されます。
    .iloc[]文法
    loc[行位置/[行位置list],列位置/[列位置list]もあり、2つの入力パラメータもあり、最初の指定行位置、2番目の指定列位置があります。パラメータが一つしかない場合、デフォルトは行の位置(つまり行全体を抽出)で、すべての列が選択されます。
    例1.1行分のデータを抽出する
    
    #   .loc[]  1   ‘  '   (     )
    mydata1.loc['  ']
    mydata1.loc['  ',]
    mydata1.loc['  ',:]
    mydata1.loc[['  '],]
    mydata1.loc[['  '],:]
    #   .iloc[]  1   ‘  '   (     )
    mydata1.iloc[0]
    mydata1.iloc[0,]
    mydata1.iloc[0,:]
    mydata1.iloc[[0],]
    mydata1.iloc[[0],:]
    
    #    1( 1    [],    Series  ):
        34
        67
        87
    Name:   , dtype: int64
    #    2( 1    [],    DataFrame  ):
              
       34 67 87
    Name:   , dtype: int64
    
    上記.loc[]と.iloc[]はいずれも1つのパラメータ「国語」または「0」のみを受信していますので、デフォルトでは行情報を表しますが、列はすべて選択されています。すなわち、「国語」という行のデータを抽出します。は、2つのパラメータを分離して(2つのパラメータがあれば)、':'ここでは選択中のすべての列を表します。入力パラメータが一つしかない場合は、pythonはデフォルトで、''と':'は書き込みも省略もできます。注意:パラメータ['国語']または[0]の中にオブジェクトが一つしかない場合(つまり1行のみ)、[]も省略できます。複数のオブジェクト(つまり複数行)がある場合は[]を加えなければなりません。また、[]を加えて抽出した結果は、データの行、データの行、データの列、データの列に関係なく、彼はDataFrameオブジェクトです。[]を追加しない場合は、1行または1列のデータが選択されている場合は、Seriesオブジェクトで、単独のデータであれば、そのデータ自体のタイプです。
    例2.指定行名抽出任意複数行データ
    
    #        
    mydata1.loc[['  ','  ','  '],:]
              
       75 73 86
       34 67 87
       94 59 81
    mydata1.iloc[[1,0],:]
              
       68 98 58
       34 67 87
    
    例2と例1の唯一の違いは、最初のパラメータが複数行を指定して一緒に出力する場合、行名または下付きを[]で囲む必要があります。そうでないとエラーが発生します。後の',''と':'は同じ例1で省略できます。注意:元のデータの行の順序は、国語、数学、英語、政治であり、ここでの抽出順序は「英語」、「国語」、「政治」であり、出力も「英語」、「国語」、「政治」であり、出力順序とパラメータ指定順序は一致しています。
    例3.連続任意複数行のデータを抽出する
    
    mydata1.loc['  ':'  ',:] #              
              
       34 67 87
       68 98 58
       75 73 86
    
    mydata1.loc[:'  ',:] #      1        
              
       34 67 87
       68 98 58
       75 73 86
    
    mydata1.iloc[0:3,:] #    1~3 
              
       34 67 87
       68 98 58
       75 73 86
    
    mydata1.iloc[1:,:] #     2     
              
       68 98 58
       75 73 86
       94 59 81
    例3は依然として1つのパラメータを受け入れていますが、列パラメータはなく、後の'、''と':'は同例1で省略できます。連続パラメータは‘start:end’で行範囲を指定します。注意:ここでは[]でくくらないとエラーが発生します。また、行列名で連続して値を取る場合、例えば「国語」「政治」は「政治」の行を取ることができますが、マトリックスを利用して表示した場合、0:3は0,1,2に対応する3行だけ取って、最後の行は取り出しません。しかし、行の署名自体が整数0,1,2...であって、文字やその他のタイプではない場合、連続する行のラベル名を使ってデータを取る場合、最後の行または列は取り出されません。
    例4.「列」を抽出する各種の場合
    
    mydata1.loc[:,['  ']] #   ,   ,     ,  []     
        
       67
       98
       73
       59
    
    mydata1.loc[:,['  ','  ']] #   ,       
           
       34 67
       68 98
       75 73
       94 59
    
    mydata1.iloc[:,[1,2]] #   , 2  3 
           
       67 87
       98 58
       73 86
       59 81
    
    mydata1.loc[:,'  ':] #               
              
       34 67 87
       68 98 58
       75 73 86
       94 59 81
    
    mydata1.iloc[:,:3] #     1     3 
              
       34 67 87
       68 98 58
       75 73 86
       94 59 81
    
    
    列全体を抽出する方式は、パラメータ設定上の行全体を抽出するのと同じです。loc[]と.iloc[]の2つの方法はデフォルトでは2番目のパラメータとなりますので、列全体を抽出する時は必ず','を付けなければなりません。
    例5.指定行と列対応データを同時に抽出する
    
    mydata1.loc['  ','  '] #       ,        ,     
    34
    <class 'numpy.int64'> #  [] ,         
    mydata1.loc[['  '],['  ']] #        ,     
        
       34
    <class 'pandas.core.frame.DataFrame'> # [] ,     DataFrame  
    
    mydata1.iloc[1,2] # 2  3   ,    
    58
    <class 'numpy.int64'> #    []      
    mydata1.iloc[[1],[2]]
        
       58
    <class 'pandas.core.frame.DataFrame'> #   []      
    
    mydata1.loc[['  ','  '],['  ']] #       ,      
        
       34
       68
    
    mydata1.iloc[1:,[0,2]] #    2      , 1  3     
           
       68 58
       75 86
       94 81
    
    
    分部行と列を同時に抽出する場合は、上記単独で行と列を抽出する方式を併用します。全体のDataFrameの対象を抽出すると.loc[:]または.iloc[:]ですが、これはあまり意味がありません。
    まとめ:
    (1)DataFrameオブジェクトの.loc[,]および.iloc[,]方法はデータを抽出するために用いられます。loc[,]は行列のラベル名をパラメータとして使用します。iloc[,]は二次元マトリックス要素のメッシュで下付きでパラメータとして表記します。
    (2)2つの方法は、2つのパラメータを受け入れます。最初は「行ラベル」または「行列行番号」、2番目は「列ラベル」または「行列列番号」です。
    (3)2つの方法は、1つの入力パラメータのみを指定すると、すべてが「行」に関連して黙示され、列はすべて選択されます。行と列の指定が必要な場合は、間をカンマで区切ることが大切です。そうでないとエラーが発生します。
    (4)すべての行のいくつかの列を選択する必要がある場合は、行パラメータを省略し、列パラメータを指定する必要があります。列パラメータの前に「:」を付ける必要があります。形はloc[:列パラメータ],iloc[:列パラメータ]のようです。
    (5).loc[,],iloc[,]は一つか二つの入力パラメータを設定していますが、肝心な点は「,」があるかどうかを確認して、二つのパラメータを分離して、カンマが一つのパラメータの内部コンマであるかを区別します。また、行列パラメータを分けるコンマもあります。
    (6)二つのパラメータの概念区分について.loc['国語'、'数学']というのは二つのパラメータを入力したことを示しています。行パラメータは‘国語’で、列パラメータは‘数学’です。上の表にとっては間違っています。'数学'という列がないので、[[国語]、'数学']と書くべきです。ここのコンマは行と列を区切るものではなく、行リストのコンマだけです。国語','数学'''=''国語','数学',''','=''',''国語','数学',:'はいずれも1行のパラメータだけを表しています。列はすべて選択されています。
    ここで、pandsでDataFrameオブジェクトを利用したデータ抽出方法について紹介します。これに関連して、pands.loc[]、.iloc[]が抽出したデータの内容を紹介します。以前の記事を検索したり、次の関連記事を見たりしてください。よろしくお願いします。