仕事上、早々にを使えるようにしないといけないため、
を基に学んでいく。
4. pandas入門
は多くのコーディング用法を
から採用しているが、テーブル形式のデータや不均一なデータを扱うために設計されている。
4.1 pandasのデータ構造
を始めるには、まずシリーズ(
)とデータフレーム(
)に慣れる必要がある。
4.1.2 データフレーム(DataFrame)
データフレームはテーブル形式のデータ構造を持ち、順序付けられた列を持つ。各列には異なるデータ型を持たせることができる。データフレームは行と列の双方にインデックスを持つ。
データフレーム作成で最も一般的な方法は、同じ長さを持つリスト型の値を持った辞書か、の配列を用いる方法である。
####################### ### DataFrameの定義 ### ####################### import pandas as pd import numpy as np data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'], 'year': [2000,2001,2003,2001,2002,2003], 'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]} frame = pd.DataFrame(data) frame = pd.DataFrame(data, columns = ['year', 'state', 'pop']) # 列の順番指定 frame2 = pd.DataFrame(data, columns = ['year', 'state', 'pop', 'debt'], index = ['one', 'two', 'three', 'four', 'five', 'six']) # 存在しない列名を宣言すると欠損値を入れて新規作成される print(frame) print(frame2) # 列指定:Seriesとして参照可能 print(frame['year']) # 辞書と同じ指定 print(frame.year) # 属性指定 # 行指定 print(frame2.loc['three']) # 値の変更 frame2['debt'] = 16.5 # 列の値を一括変更できる print(frame2) frame2['debt'] = np.arange(6.) # 列にリスト・配列を格納するならば、長さを一致させる print(frame2) frame2['debt'] = pd.Series([-1.2, -1.5, -1.7], index = ['two', 'four', 'five']) # Seriesを代入する場合、ラベルはインデックスに従って代入。対応するものがないと欠損値を与える print(frame2) frame2['eastern'] = frame2['state'] == 'Ohio' # 存在しない列に代入すると、新しい列が作成される print(frame2) # 列の削除 del frame2['eastern'] print(frame2)
一方で、ネストした辞書をデータフレームに変換することもできる。なお参考文献によると、「内側のディクショナリのキーは統合した後にソートされ、データフレームのインデックスになります。」と書かれているが、現在の環境ではそうなっていなかった*1。
# ネストした辞書をデータフレームに変換 import pandas as pd pop = {'Nevada': {2001: 2.4, 2002: 2.9}, 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}} frame3 = pd.DataFrame(pop) # 外側の辞書のキーを列のインデックスと解釈し、内側のインデックスのキーを行のインデックスと解釈する print(frame3) # 転置 print('') print(frame3.T) pd.DataFrame(pop, index = [2001, 2002, 2003]) # Seriesを値に持つ辞書を使う場合も同じように扱われる pdata = {'Ohio': frame3['Ohio'].iloc[:-1], 'Nevada': frame3['Nevada'].iloc[:2]} pdata = pd.DataFrame(pdata) print('') print('pdata') print(pdata) # データフレームのindex,columnsがname属性を持つ場合、それもコンソールに現れる frame3.index.name = 'year' frame3.columns.name = 'state' print('') print('frame3') print(frame3) # values属性を参照すると、データフレーム内のデータが2次元のndarrayとして返る print('') print('frame3.values') print(frame3.values)
型 |
説明 |
---|---|
2次元 |
データの行列。任意で行名・列名を渡すことが可能。 |
配列、リスト、タプルを値に持つ辞書 | 各シーケンスがデータフレームの列になる。すべてのシーケンスは同じ長さでなければならない。 |
配列を値に持つ辞書と同様に扱われる。 | |
辞書を値に持つ辞書 | 値になっている各辞書が列になる。 |
辞書または |
各要素がデータフレームの行になる。辞書のキーや |
リストまたはタプルのリスト | 2次元 |
別のデータフレーム | 何も指定されなければ、入力に使用したデータフレームのインデックスがインデックスとして利用される。 |
マスクされた値がデータフレームでは欠損値になるという点を除き、2次元 |