Python-pandas-indexing-and-selecting-data

提供:Dev Guides
移動先:案内検索

Python Pandas-データのインデックス作成と選択

この章では、日付を切り刻み、パンダオブジェクトのサブセットを取得する方法について説明します。

PythonおよびNumPyのインデックス演算子「[]」および属性演算子「。」幅広いユースケースでPandasデータ構造にすばやく簡単にアクセスできます。 ただし、アクセスするデータのタイプは事前にはわからないため、標準演算子を直接使用すると最適化の制限がいくつかあります。 本番コードの場合、この章で説明する最適化されたパンダデータアクセス方法を利用することをお勧めします。

パンダは現在、3種類のマルチ軸インデックスをサポートしています。 3つのタイプは、次の表に記載されています-

Sr.No Indexing & Description
1

.loc()

ラベルベース

2

.iloc()

整数ベース

3

.ix()

ラベルと整数ベースの両方

.loc()

パンダは、純粋に*ラベルベースのインデックス作成*を行うためのさまざまな方法を提供します。 スライスするとき、開始境界も含まれます。 整数は有効なラベルですが、位置ではなくラベルを参照します。

  • .loc()*には複数のアクセス方法があります-

  • 単一のスカラーラベル

  • ラベルのリスト

  • スライスオブジェクト

  • ブール配列

    *loc* は、「、」で区切られた2つのsingle/list/range演算子を取ります。 最初の行は行を示し、2番目の行は列を示します。

例1

#import the pandas library and aliasing as 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'])

#select all rows for a specific column
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
Name: A, dtype: float64

例2

# import the pandas library and aliasing as 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'])

# Select all rows for multiple columns, say 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

# import the pandas library and aliasing as 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'])

# Select few rows for multiple columns, say 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

# import the pandas library and aliasing as 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'])

# Select range of rows for all columns
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

# import the pandas library and aliasing as 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'])

# for getting values with a boolean array
print df.loc['a']>0

その*出力*は次のとおりです-

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

.iloc()

パンダは、純粋に整数ベースのインデックスを取得するためにさまざまなメソッドを提供します。 pythonやnumpyと同様に、これらは* 0ベースのインデックスです。

さまざまなアクセス方法は次のとおりです-

  • 整数
  • 整数のリスト
  • 値の範囲

例1

# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

# select all rows for a specific column
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), columns = ['A', 'B', 'C', 'D'])

# Integer slicing
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), columns = ['A', 'B', 'C', 'D'])

# Slicing through list of values
print df.iloc[[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), columns = ['A', 'B', 'C', 'D'])

# Integer slicing
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), columns = ['A', 'B', 'C', 'D'])
# Index slicing
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
Name: A, dtype: float64

表記法の使用

Multi-axesインデックスを使用してPandasオブジェクトから値を取得するには、次の表記法を使用します-

Object Indexers Return Type
Series s.loc[indexer] Scalar value
DataFrame df.loc[row_index,col_index] Series object
Panel p.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), columns = ['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
Name: A, dtype: float64

注意-値のリストを[]に渡して、それらの列を選択できます。

例2

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['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), columns = ['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), columns = ['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
Name: A, dtype: float64