仕事上、早々にを使えるようにしないといけないため、
を基に学んでいく。
前回
4. pandas入門
は多くのコーディング用法をから採用しているが、テーブル形式のデータや不均一なデータを扱うために設計されている。
4.1 pandasのデータ構造
を始めるには、まずシリーズ()とデータフレーム()に慣れる必要がある。
4.1.3 インデックスオブジェクト
のインデックスオブジェクトは、軸のラベルやその他のメタデータを保持する役目を持つ。
インデックスオブジェクトは変更ができない。
################################ ### インデックスオブジェクト ### ################################ import pandas as pd import numpy as np obj = pd.Series(range(3), index = ['a', 'b', 'c']) index = obj.index print(index) print(index[1:]) print('') # インデックスオブジェクトは変更不可能である try: index[1] = 'd' except: print('インデックスオブジェクトは変更不可能です!') labels = pd.Index(np.arange(3)) print(labels) obj2 = pd.Series([1.5, -2.5,0.0], index = labels) print(obj2) print('') print( '●obj2のインデックスはlabelsと同じか?:' + str(obj2.index is labels))
infallible
インデックスオブジェクトは集合のように用いることもできるが、の集合とは異なり、インデックスオブジェクトは重複したラベルを保持できる。重複したラベルデータを検索すると、そのラベルを持つすべてのデータが抽出される。
メソッド |
説明 |
---|---|
追加のインデックスオブジェクトを連結し新たなインデックスオブジェクトを作成する。 |
|
集合の差を計算し、その差をインデックスオブジェクトとして表現する。 |
|
集合の論理積を計算する。 |
|
和集合を計算する。 |
|
各値が集合に含まれているかどうかを示す型の配列を返す。 |
|
指定した番目の要素を削除した新しいインデックスオブジェクトを作成する。 |
|
指定した値を削除した新しいインデックスオブジェクトを作成する。 |
|
指定した番目に要素を挿入した新しいインデックスオブジェクトを作成する。 |
|
各要素が1つ前の要素と等しいか、それよりも大きい場合にを返す。 |
|
インデックスオブジェクトが重複した値を持たない場合にを返す。 |
|
インデックスオブジェクトから重複の無い値の配列を計算する。 |
4.2 pandasの重要な機能
4.2.1 再インデックス付与
のオブジェクトの非常に重要なメソッドにがある。このメソッドは、新しいインデックスに従ったデータを持つ新しいオブジェクトを作成する。
############################ ### インデックスの再付与 ### ############################ import pandas as pd import numpy as np obj = pd.Series([4.5,7.2,-5.3,3.6],index = ['d','b','a','c']) # reindex:新しいインデックスに従ってデータが再調整される obj2 = obj.reindex(['a','b','c','d','e']) # eはインデックスオブジェクトに無いため、NaNが与えられる print(obj2)
時系列データのようにデータの順序がある場合、再インデックス付けのとき、内挿や穴埋め行えるのが望ましい。そのためにはオプションを用いる*1。
############################ ### インデックスの再付与 ### ############################ import pandas as pd import numpy as np obj = pd.Series([4.5,7.2,-5.3,3.6],index = ['d','b','a','c']) # reindex:新しいインデックスに従ってデータが再調整される obj2 = obj.reindex(['a','b','c','d','e']) # eはインデックスオブジェクトに無いため、NaNが与えられる print(obj2) # methodオプションを用いる obj3 = pd.Series(['blue', 'purple', 'yellow'], index = [0,2,4]) print(obj3) obj3.reindex(range(6), method = 'ffill') # 欠損部分にはその直前の値が与えられる # DataFrameでもreindexを用いて行インデックス、列インデックスを変更できる frame = pd.DataFrame(np.arange(9).reshape((3,3)), index = ['a','c','d'], columns = ['Ohio','Texas','California']) frame2 = frame.reindex(['a','b','c','d']) # 行を変える場合 frame3 = frame.reindex(columns = ['Texas','Utah','California']) # 列を変える場合 print('') print(frame2)# 指定しなかったものは削除される print(frame3)
引数 |
説明 |
---|---|
インデックスに使用する新しいシーケンス |
|
内挿方法の指定 |
|
再インデックス付けにおいて欠損値の代わりに使用する値 |
|
前方、後方挿入の際に埋める数の最大値 |
|
前方、後方挿入の際にインデックスの数値にどれくらいの差がある場合まで欠損埋めを行なう最大値 |
|
階層型インデックスを使用する場合に行う階層を指定する |
|
にすると常にデータがコピーされる。 |
*1:なおlocフィールドを用いたインデックス参照で再インデックス付けができるとしているが、現在のバージョンではNaNでの欠損値挿入がなされず、エラーがでる。