pandas
 ← list
 → list
 ← csv
 → csv
 重複削除
 Series追加
 切り出し
 連結
 型変換
 → numpy
 インデックス参照
 インデックス変更
 Series or DF ?
 学習例

 機能・要件
 構成・方式
 タスク
 ライブラリ
 導入
 Sample
 Error
 基礎他
 pandas(パンダス、パンダ)
 ・時系列のデータ操作やデータ構造を変更するなど、テーブルデータを取り扱うライブラリ
必要なデータを精査する前処理などに用いる。
 ・numpy を利用し、さらにAPIを拡張し、使いやすくなっている。
pandasの抽象化や関数呼び出しのオーバーヘッドが発生する。
 ・Series (シリーズ)
最も基本的なオブジェクト
NumPyのndarrayの一次元配列の拡張版
シリーズは1次元の配列のようなデータ構造
シリーズは様々な型のデータを持つ。
データに関連付けられたインデックスを持つ。
Series()メソッドを使用してシリーズを作成
pd.Series(データ[, index=インデックス])
1セットのデータを格納、辞書形式で複数繋ぐとDataFrameオブジェクト
 ・DataFrame (データフレーム)
基本構造(2次元の大きさが変更できる表形式データ)
シリーズを値にもつ辞書のような構造
データフレームは様々な型のデータを持つ。
各次元(行と列)方向にはラベリングされた軸(axes)が存在
行と列の両方にインデックスを持つ。
各次元(行と列)方向に数学的な操作を行える。
パラメータ名
data (省略可)初期値None
index (省略可)初期値None(RangeIndexによって0から順にラベリング)
columns (省略可)初期値None(RangeIndexによって0から順にラベリング)
dtypes (省略可)初期値None 使用するデータ型を指定
copy (省略可)初期値False
DataFrame()メソッドを使用してデータフレームを作成
pd.DataFrame(データ[, index=行インデックス][, columns=列インデックス])
pd.DataFrame() 空のデータフレーム

 pandas ← list
 ・X = pd.DataFrame(リスト)
 ・必用ならば インデックス変更

 pandas → list
 ・pandas.DataFrame、pandas.Series をリスト型に直接変換するメソッドは無い。
values属性で取得できるNumPy配列 ndarray を経由する。
ndarray の tolist()メソッドでリストに変換する。
 ・データ部分をリストに変換(元のオブジェクト変わらず、新たなのオブジェクトを生成)
X = pd.DataFrame(リスト)
List_X = X.values.tolist()
values属性ではラベル(行名、列名)が有っても無視される。
 ・データ部分とラベル(行名・列名)をリスト型listに変換
reset_index()メソッドでindex列をリセットしてデータ列にする。
 ・ラベル(行名・列名)をリスト型listに変換(pandas.DataFrame の場合)
行ラベル(行名)は index属性、列ラベル(列名)は columns属性を利用
両Index型をfor文で要素を取り出す。または[]で位置を指定して要素を取り出す。

 pandas ← csv
 ・X = pd.DataFrame(x_csv, index_col=[0, 1, 4], header=None)
 ・X = pd.read_csv(x_csv, index_col=0).head=(3)
 ・必用ならば インデックス変更

 pandas.DataFrame、Series をCSVファイルとして書き込み
 ・pandas.DataFrame、pandas.Seriesのメソッドとしてto_csv()が用意されている。
第一引数にパスを指定すると、CSVファイルとして出力される。
 ・X.to_csv('data/x_csv')

 重複を削除
 ・複数の列の重複を削除したい場合
df.drop_duplicates(subset=['列1', '列2'])
大文字と小文字は区別

 Series追加
 ・Seriesで要素を渡す
df = pd.DataFrame(data={'列2': pd.Series([50, 60, 80],index=['行1', '行2', '行4'])})
空のセルを作ることができる。

 切り出し
 ・切り出した文字列を新規カラムとして追加
df['new_name'] = df['name'].str[:2]
2文字切り出し

 DataFrame と Series を連結(結合)
 ・DataFrame に Series を追加
df = pd.concat([df, pd.DataFrame([sr])], ignore_index=True)
Serise を DataFrame に変換して連結
append() は将来なくなる予定

 型変換(キャスト)
 ・astype()メソッド
df.astype(str) (全体を一括で変換)

 pandas → numpy
 ・全てのデータを同じ型に整えてからnumpyに渡す。
 ・一部の要素だけ抜き出してnumpyの演算を行う。

 インデックス参照
 ・位置指定
単独の要素 at iat
単独及び複数の素 loc iloc
iat iloc は行番号、列番号
df.loc['xxx', 'yyy']
df.iloc[3, 4]
 ・インデックス名取得
df.index
df.index[3]
Index名をカラム名に転置して取得
 ・インデックスがダブっていればリスト出力
リスト出力された物をDataFrame(リスト)メソッドを使用して再度データフレームを作成

 インデックス変更
 ・インデックスリストを 列 1 に変更
df.set_index(1, inplace=True)
 ・インデックスに 列 2 を追加
df.set_index(2, append=True)

 与えられたデータは Series か DataFrame か
 ・isinstance 関数(パラメータ 2 個)
if isinstance(pd_data, pd.Series)
True 時の作業
 ・type 関数もあり

 学習例
 ・boston_house_prices
 ・手書き文字
 ・WineQuality