English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Pandas 索引とデータクエリ

Pandasインデックスとデータクエリの操作例

本章では、日付のスライスやクッキングを行い、Pandasオブジェクトのサブセットを取得する方法について説明します。
PythonおよびNumPyのインデックス演算子「[]」と属性演算子「.」。Pandasデータ構造へのアクセスをさまざまな用例で迅速かつ簡単に行うことができますが、アクセスするデータのタイプが事前にわからないため、標準演算子を使用するといくつかの最適化制限が発生します。生産コードでは、本章で紹介された最適化されたPandasデータアクセスメソッドを利用することをお勧めします。
Pandasは現在、以下の3種類の多軸インデックスをサポートしています:下表に示される3種類のインデックスが挙げられます-

インデックス説明
.loc()タグに基づいて
.iloc()整数に基づいて
.ix()タグと整数に基づいて

.loc()

Pandasはタグベースのインデックスを完全にサポートしています。スライス時には、開始境界も含まれます。整数は有効なタグですが、位置ではなくタグを参照しています。

.loc() さまざまなアクセスメソッドを持っています。例えば:

一つのスカラータグ タグリスト スライスオブジェクト ブール配列

loc 二つの単/リスト/範囲演算子は「,」で区切られます。最初の指示行、次の指示列です。

ケース 1

# pandasライブラリをインポートし、別名pdとします
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4),
 index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
 # 特定の列のすべての行を選択
 print(df.loc[:,'A'])

実行結果:

  a  0.391548
b  -0.070649
c  -0.317212
d  -2.162406
e   2.202797
f  0.613709
g   1.050559
h   1.122680
名前: A, データ型: float64

例 2

   
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4),
 index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
 # 複数の列のすべての行を選択、例えばlist[]
 print(df.loc[:,['A','C']])

実行結果:

          A      C
a   0.391548    0.745623
b   -0.070649    1.620406
c   -0.317212    1.448365
d   -2.162406   -0.873557
e    2.202797    0.528067
f   0.613709    0.286414
g    1.050559    0.216526
h    1.122680   -1.621420

例 3

# pandasライブラリをインポートし、別名pdとします
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4),
 index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
 # 複数の列のいくつかの行を選択、例えばlist[]
 print(df.loc[['a','b','f','h'],['A','C']])

実行結果:

         A    C
a  0.391548   0.745623
b  -0.070649   1.620406
f  0.613709   0.286414
h   1.122680  -1.621420

例 4

# pandasライブラリをインポートし、別名pdとします
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4),
 index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
 # すべての列の行範囲を選択
 print(df.loc['a':'h'])

実行結果:

          A     B     C      D
a   0.391548   -0.224297   0.745623   0.054301
b   -0.070649   -0.880130   1.620406   1.419743
c   -0.317212   -1.929698   1.448365   0.616899
d   -2.162406    0.614256  -0.873557   1.093958
e    2.202797   -2.315915   0.528067   0.612482
f   0.613709   -0.157674   0.286414  -0.500517
g    1.050559   -2.272099   0.216526   0.928449
h    1.122680   0.324368  -1.621420  -0.741470

例 5

# pandasライブラリをインポートし、別名pdとします
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4),
 index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
 # 布尔配列を使用して値を取得するためのもの
 print(df.loc['a'] > 0)

実行結果:

   A  False
 B  True
 C  False
 D  False
 Name: a, dtype: bool

.iloc()

Pandasは、PythonやNumPyと同様に、0ベースのインデックスを提供して、純粋に整数ベースのインデックスを取得するためのさまざまな方法を提供しています。
さまざまなアクセス方法は以下の通りです:

整数 整数リスト 値範囲

例1

# pandasライブラリをインポートし、別名pdとします
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), 列名 = ['A', 'B', 'C', 'D'])
 # 特定の列のすべての行を選択
 print(df.iloc[:4)

実行結果:

         A     B     C      D
0  0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070   0.230806
3   0.539042  -1.284314    0.826977   -0.026251

例 2

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), 列名 = ['A', 'B', 'C', 'D'])
 # 整数スライス
 print(df.iloc[:4]
 print(df.iloc[1:5, 2:4)

実行結果:

         A     B     C      D
0  0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070   0.230806
3   0.539042  -1.284314    0.826977   -0.026251
           C     D
1  -0.813012   0.631615
2   0.025070  0.230806
3   0.826977  -0.026251
4   1.423332   1.130568

例 3

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), 列名 = ['A', 'B', 'C', 'D'])
 # 値リストのスライス
 print(df.iloc[[1, 3, 5], [1, 3]
 print(df.iloc[1:3, :])
 print(df.iloc[:,1:3)

実行結果:

         B     D
1   0.890791    0.631615
3  -1.284314   -0.026251
5  -0.512888   -0.518930
           A     B     C      D
1  -0.685354    0.890791   -0.813012    0.631615
2  -0.783192   -0.531378    0.025070   0.230806
           B     C
0  0.256239   -1.270702
1   0.890791   -0.813012
2  -0.531378    0.025070
3  -1.284314    0.826977
4  -0.460729    1.423332
5  -0.512888    0.581409
6  -1.204853    0.098060
7  -0.947857    0.641358

.ix()

標準のタグベースと整数ベースの方法に加えて、Pandasは.ix()演算子を使用して選択およびサブセットオブジェクトを選択するためのハイブリッド方法を提供しています。

例 1

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), 列名 = ['A', 'B', 'C', 'D'])
 # 整数スライス
 print(df.ix[:4)

実行結果:

         A     B     C      D
0  0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070   0.230806
3   0.539042  -1.284314    0.826977   -0.026251

例 2

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), 列名 = ['A', 'B', 'C', 'D'])
 # インデックススライス
 print(df.ix[:, 'A'])

実行結果:

  0  0.699435
1  -0.685354
2  -0.783192
3   0.539042
4  -1.044209
5  -1.415411
6   1.062095
7   0.994204
名前: A, データ型: float64

シンボルの使用方法

Pandasオブジェクトから値を取得する際の多軸インデックスの使用方法は以下のシンボルで示されます:

オブジェクトインデックスエンジン返り値の型
Seriess.loc[indexer]スカラー値
DataFramedf.loc[row_index,col_index]Series オブジェクト
Panelp.loc[item_index,major_index, minor_index]p.loc[item_index,major_index, minor_index]

.iloc()と.ix()は同じ索引オプションと返り値を適用します。

DataFrameオブジェクトに対してどのような操作を行うかを見てみましょう。基本的な索引演算子'[]'を使用します。-

例 1

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), 列名 = ['A', 'B', 'C', 'D'])
 print(df['A'])

実行結果:

  0  -0.478893
1   0.391931
2   0.336825
3  -1.055102
4  -0.165218
5  -0.328641
6   0.567721
7  -0.759399
名前: A, データ型: float64

値リストを[]に渡すことで、それらの列を選択できます

例 2

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), 列名 = ['A', 'B', 'C', 'D'])
 print(df[['A','B']])

実行結果:

         A           B
0  -0.478893   -0.606311
1   0.391931   -0.949025
2   0.336825    0.093717
3  -1.055102   -0.012944
4  -0.165218    1.550310
5  -0.328641   -0.226363
6   0.567721   -0.312585
7  -0.759399   -0.372696

例 3

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), 列名 = ['A', 'B', 'C', 'D'])
 print(df[2:2)

実行結果:

   Columns: [A, B, 'C', 'D]
 Index: []

属性アクセス

属性演算子「。」を使用して列を選択することができます。

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), 列名 = ['A', 'B', 'C', 'D'])
 print(df.A)

実行結果:

  0   -0.478893
1    0.391931
2    0.336825
3   -1.055102
4   -0.165218
5   -0.328641
6    0.567721
7   -0.759399
名前: A, データ型: float64