Pythonライブラリ学習ノート——Pandasデータインデックス:ix、loc、ilocの違い

4166 ワード

Different Choices for Indexing
1.loc-行ラベルで行データをインデックスする
1.1 loc[1]インデックスが1行目であることを示す(indexは整数)
import pandas as pd
data = [[1,2,3],[4,5,6]]
index = [0,1]
columns=['a','b','c']
df = pd.DataFrame(data=data, index=index, columns=columns)
print df.loc[1]
'''
a    4
b    5
c    6
'''

1.2 loc[‘d’]はインデックスが第’d’行であることを示す(indexは文字である)
import pandas as pd
data = [[1,2,3],[4,5,6]]
index = ['d','e']
columns=['a','b','c']
df = pd.DataFrame(data=data, index=index, columns=columns)
print df.loc['d']
'''
a    1
b    2
c    3
'''

1.3カラムデータをインデックスしたい場合は、このようにするとエラーが発生します.
  
import pandas as pd
data = [[1,2,3],[4,5,6]]
index = ['d','e']
columns=['a','b','c']
df = pd.DataFrame(data=data, index=index, columns=columns)
print df.loc['a']
'''
KeyError: 'the label [a] is not in the [index]'
'''

1.4 locは複数行のデータを取得できる
  
import pandas as pd
data = [[1,2,3],[4,5,6]]
index = ['d','e']
columns=['a','b','c']
df = pd.DataFrame(data=data, index=index, columns=columns)
print df.loc['d':]
'''
   a  b  c
d  1  2  3
e  4  5  6
'''

1.5 loc拡張-行の列をインデックスする
import pandas as pd
data = [[1,2,3],[4,5,6]]
index = ['d','e']
columns=['a','b','c']
df = pd.DataFrame(data=data, index=index, columns=columns)
print df.loc['d',['b','c']]
'''
b    2
c    3
'''

1,6 loc拡張-インデックスのあるカラム
import pandas as pd
data = [[1,2,3],[4,5,6]]
index = ['d','e']
columns=['a','b','c']
df = pd.DataFrame(data=data, index=index, columns=columns)
print df.loc[:,['c']]
'''
   c
d  3
e  6
'''

もちろん、ある列のデータを取得する最も直接的な方法はdfである.[カラムラベル]ですが、カラムラベルが不明な場合は、この方法でカラムデータを取得できます.なお、dataframeのインデックス[1:3]は、通常とは異なる1,2,3を含む.
2.iloc-行番号による行データの取得
2.1どのローを取得するか、そのローの数値を入力します.
import pandas as pd
data = [[1,2,3],[4,5,6]]
index = ['d','e']
columns=['a','b','c']
df = pd.DataFrame(data=data, index=index, columns=columns)
print df.loc[1]
'''
a    4
b    5
c    6
'''

2.2行タグインデックスによるエラーの報告
import pandas as pd
data = [[1,2,3],[4,5,6]]
index = ['d','e']
columns=['a','b','c']
df = pd.DataFrame(data=data, index=index, columns=columns)
print df.iloc['a']
'''
TypeError: cannot do label indexing on  with these indexers [a] of 
'''

2.3同じように行番号で複数行をインデックスできる
  
import pandas as pd
data = [[1,2,3],[4,5,6]]
index = ['d','e']
columns=['a','b','c']
df = pd.DataFrame(data=data, index=index, columns=columns)
print df.iloc[0:]
'''
   a  b  c
d  1  2  3
e  4  5  6
'''

2.4 ilocインデックス列データ
  
import pandas as pd
data = [[1,2,3],[4,5,6]]
index = ['d','e']
columns=['a','b','c']
df = pd.DataFrame(data=data, index=index, columns=columns)
print df.iloc[:,[1]]
'''
   b
d  2
e  5
'''

3.ix-最初の2つの混合インデックスを結合
3.1行番号索引による
import pandas as pd
data = [[1,2,3],[4,5,6]]
index = ['d','e']
columns=['a','b','c']
df = pd.DataFrame(data=data, index=index, columns=columns)
print df.ix[1]
'''
a    4
b    5
c    6
'''

3.2行ラベル索引
import pandas as pd
data = [[1,2,3],[4,5,6]]
index = ['d','e']
columns=['a','b','c']
df = pd.DataFrame(data=data, index=index, columns=columns)
print df.ix['e']
'''
a    4
b    5
c    6
'''