Python 3——pandasのDataFrame(.ix.loc.iloc)データを取るピット~


博主辛苦码出滴~,才疏学浅,如果有错误请指正,未经博主许可转载.
pandasはデータ処理で最もよく使われるツールの一つで、データFrame全体のデータを使う必要はなく、それぞれの行や列を取りたい場合があります.ix .loc .ilocで実現しますが、この3つは使用時に特に以下の状況に注意してください.
  • データのindexはデフォルト値、すなわち0,1,......
  •   この場合dataを用いる.ix[0:n,カラム名または数値]またはdata.loc[0:n,カラム名]データを取得する場合、index=nというカラムを取得できます.この場合、0:nは下付きではなくindexの名前を指すからです.データには及ばないiloc[0:n,数値またはdata.columns="列名"]は、index=n-1の前のn行のみを取得できます.
    import pandas as pd
    import numpy as np
    data = pd.DataFrame(np.arange(0, 25).reshape(5, 5), columns=list('abcde'))
    print('    
    '
    , data) print('
    .ix '
    ) print(data.ix[0:3, data.columns != 'b']) # :index 0:3 3 print('
    .loc '
    ) print(data.loc[0:3, data.columns != 'b']) # :index 0:3 3 print('
    .iloc '
    ) print(data.iloc[0:3, data.columns != 'b']) # 0:3 3
        
         a   b   c   d   e
    0   0   1   2   3   4
    1   5   6   7   8   9
    2  10  11  12  13  14
    3  15  16  17  18  19
    4  20  21  22  23  24
    
    .ix    
        a   c   d   e
    0   0   2   3   4
    1   5   7   8   9
    2  10  12  13  14
    3  15  17  18  19
    
    .loc    
        a   c   d   e
    0   0   2   3   4
    1   5   7   8   9
    2  10  12  13  14
    3  15  17  18  19
    
    .iloc    
        a   c   d   e
    0   0   2   3   4
    1   5   7   8   9
    2  10  12  13  14
    
  • データのindexが指定する名前の値ix[0:n,カラム名または数値]データを取得するときdata.iloc[0:n,数字またはdata.columns="列名"]と同様にindex=nという列は取れません.このとき0:nは下付きを指し、前のn行しか取れないからです.  この時点data.loc[0:n,カラム名]は使用できません.対応するindexで指定した値を書くべきです.
  • data = pd.DataFrame(np.arange(0, 25).reshape(5, 5), columns=list('abcde'), index=list('ABCDE'))
    print('    
    '
    , data) print('
    .ix '
    ) print(data.ix[0:3, 1]) # :index 0:3 3 print('
    .loc '
    ) print(data.loc[['A', 'B'], data.columns == 'b']) # : index print('
    .iloc '
    ) print(data.iloc[0:3, 1]) # 0:3 3
        
         a   b   c   d   e
    A   0   1   2   3   4
    B   5   6   7   8   9
    C  10  11  12  13  14
    D  15  16  17  18  19
    E  20  21  22  23  24
    
    .ix    
        b
    A   1
    B   6
    C  11
    
    .loc    
       b
    A  1
    B  6
    
    .iloc    
        b
    A   1
    B   6
    C  11
    

    総じて言えば、どの方法が使う慣用はどれを使うのか、注意しなければならない.ixと.locの穴、以下は私が自分の使用状況に基づいてまとめたものです.
    方法
    適用状況
    .ix
    列数が多い場合、取りたい列が分散している場合に適用されます.複雑なindex値があり、行数が多い場合は、取りたい行が分散している場合にも適用されます.
    .loc
    列数が多い場合、取りたい列が分散している場合に適用されます.単純なindex値があり、行数が多い場合は、取りたい行が分散している場合にも適用されます.
    .iloc
    行列の下に値を付ける場合に適用