====== Python モジュール: pandas ======
===== 概要 =====
* Python のデータフレームモジュール
* データフレームとは、複数のデータ型が入り交じるデータ集合を 1 つのデータセットでまとめたもの
* リストやディクショナリ型でも対応は可能だが、例えば 1 原子に様々なパラメータ (座標や原子名、原子量などなど) が加わると、
* データへのアクセスの仕方が難しくなる
* ソートが難しい
* プログラム言語にもよるが、リストやディクショナリでは特定の型のデータしか格納できない
* 内部のデータを確認する際に、for 文などで取り出して整形しないと見づらい
* データフレームでは、自動で整形やソートの際の煩雑な作業をしてくれるのでデータ処理が楽になる。
===== 使い方 =====
==== インストール ====
$ sudo pip3 install pandas
==== モジュールの読み込み ====
import pandas
あるいは
import pandas as pd
* ''as pd'' によって、以降 ''pd'' で呼び出せる。
* ここではこっちの読み込みをした場合で記述していく。
==== データフレームの作成 ====
data_frame = \
pd.DataFrame([
["Tanaka", "Suzuki", "Yamada"],
[59, 20, 31],
[150, 160, 159]
]).T
data_frame.columns = ["Name", "Age", "Height"]
data_frame.index = [1,2,3]
* ''.T'': numpy の転置と同じ (pandas では、行を個々のデータ、列をデータの種類としているため、転置を使っている)
* ''data_frame.columns'' で、各リストのデータ名 (カラム名) を上書きする
* ''data_frame.index'' で、各リストのインデックス (シリアル ID) を上書きする
* インデックスは数値でないといけない
==== データフレームへのアクセス ====
* カラム、インデックスへのアクセス\\
print(data_frame.columns)
print(data_frame.index)
* `data_frame.columns` でカラム一覧にアクセス
* `data_frame.index` でインデックス一覧にアクセス
* データへのアクセス
* 単一カラムへのアクセス\\ print(data_frame["Name"])
* 複数カラムへのアクセス\\ print(data_frame[["Name", "Age"]])
* リストでカラム名を指定する
* 行へのアクセス\\ print(data_frame[1:2])
* スライスで必ず、始点と終点を指定する
* カラムと同時に指定する場合は、カラム、行の順番で。
* 参考サイト: [[http://akiyoko.hatenablog.jp/entry/2017/04/03/081630 | pandas.DataFrame の列の抽出(射影)および行の抽出(選択)方法まとめ - akiyoko blog]]
==== データの追加 ====
* カラムの追加\\ data_frame[NEW_COLUMN] = [DATA1, DATA2, DATA3, ...]
* ''NEW_COLUMN'': 新しく追加するカラム名
* ''DATA1, DATA2, ...'': 追加するデータはリストで渡す
* 次元が合わない場合は、エラーになる
* 参考サイト: [[https://qiita.com/hi34/items/43c366dea18b46faf49d | pandasの基本操作 - Qiita]]
* 行の追加\\ data_frame = data_frame.append(DATA_FRAME)
* ''DATA_FRAME'': 追加するデータが入った pandas のデータフレーム
* 次元が合わない場合は、''NaN'' となる。
* 返り値を受け取る形で更新する。
* 参考サイト: [[https://qiita.com/hi34/items/43c366dea18b46faf49d | pandasの基本操作 - Qiita]]
* データフレームの追加
* 横に結合 (カラムの追加) \\ DATA_FRAME = pd.concat([DATA_FRAME1, DATA_FRAME2, ...], axis = 1)
* 縦に結合 (行の追加)\\ DATA_FRAME = pd.concat([DATA_FRAME1, DATA_FRAME2, ...])
* 参考サイト: [[http://sinhrks.hatenablog.com/entry/2015/01/28/073327 | Python pandas 図でみる データ連結 / 結合処理 - StatsFragments]]
* データの欠損は ''NaN'' 扱いとなる。''NaN'' を置換するには ''.fillna()'' を使う。\\ DATA_FRAME.fillna("")
* 上記の例では、''NaN'' が空の文字列に置換される。
* 参考サイト: [[https://note.nkmk.me/python-pandas-nan-dropna-fillna/ | pandasで欠損値NaNを除外(削除)・置換(穴埋め)する | Python / note.nkmk.me]]
==== 値の取得・変更 ====
* 行ラベルと列ラベルで指定した値を取得\\ DF.at[ROW_LABEL, COL_LABEL]
* ''DF'': データフレーム変数
* ''ROW_LABEL'': 行ラベル
* ''COL_LABEL'': 列ラベル
* 行ラベルと列ラベルで指定した値を変更\\ DF.at[ROW_LABEL, COL_LABEL] = VALUE
* ''DF'': データフレーム変数
* ''ROW_LABEL'': 行ラベル
* ''COL_LABEL'': 列ラベル
* ''VALUE'': 新しい値
* 行番号と列番号で指定した値を取得\\ DF.iat[ROW_INDEX, COL_INDEX]
* ''DF'': データフレーム変数
* ''ROW_INDEX'': 行番号
* ''COL_INDEX'': 列番号
* 行番号と列番号で指定した値を変更\\ DF.iat[ROW_INDEX, COL_INDEX] = VALUE
* ''DF'': データフレーム変数
* ''ROW_INDEX'': 行番号
* ''COL_INDEX'': 列番号
* ''VALUE'': 新しい値
* 参考サイト: [[https://note.nkmk.me/python-pandas-at-iat-loc-iloc/ | pandasで任意の位置の値を取得・変更するat, iat, loc, iloc | Python / note.nkmk.me]]
==== データフレームのサイズ確認 ====
* 2 つの方法がある。
* ''.index'' や ''.columns'' で取得したカラム名やインデックス名のリストを ''len()'' を使って取得する。
* ''DATA_FRAME.shape'' でインデックスとカラム数を同時に取得する。
==== ファイルの読み込み ====
* テキストファイルの場合\\ DF = pd.read_table("INPUT.txt", names = [LABEL1, LABEL2, ...])
* ''DF'': データフレームを格納する変数
* ''INPUT.txt'': 入力ファイル
* ''LABEL1, LABEL2,...'': カラム名
==== CSV ファイルの読み書き ====
* 読み込み\\ DF = pd.read_csv(CSV_FILE[, OPTION])
* ''DF'': データフレームを格納する変数
* ''CSV_FILE'': CSV ファイルのパス
* ''OPTION'': その他のオプション (任意)
* この場合、1 行目が列ラベルとして割り当てられる。
* 列ラベルの指定方法
* 1 行目をラベルとして割り当てたくない場合は、''OPTION'' に ''header = None'' を指定する。
* 任意の列ラベルを指定する場合は、''OPTION'' に ''name = (LABEL1, LABEL2, ...)'' を付け、''LABEL1'' や ''LABEL2'' に列ラベルを指定していく。
* 特定の行を列ラベルとして指定する場合は、''OPTION'' に ''header = NUM'' の ''NUM'' に行番号 (0 から始まる) を指定する。この場合、指定した行より上の行は無視される。
* 行ラベルの指定方法
* 特定の列を行ラベルを指定する場合は、''OPTION'' に ''index_col = NUM'' の ''NUM'' に列番号 (0 から始まる) を指定する。
* 書き出し\\ DF.to_csv(CSV_FILE[, OPTION])
* ''DF'': データフレームが格納された変数
* ''CSV_FILE'': 出力する CSV ファイルのパス
* ''OPTION'': その他のオプション (任意)
* 特定の列のみを書き出す場合、''OPTION'' に ''columns = [LABEL1, LABEL2, ...]'' を追加し、''LABEL1'' や ''LABEL2'' に書き出す列ラベルを指定していく。
* 列ラベルや行ラベルも書き出す場合は、''OPTION'' に ''header'' (列ラベル) や ''index'' (行ラベル) を追加し、''TRUE'' や ''FALSE'' で ON/OFF を切り替える。デフォルトは両方 ''True''
* 区切り文字を指定する場合は、''OPTION'' に ''sep = SEP'' を追加し、''SEP'' に区切り文字を指定する。''SEP'' に ''\t'' を指定すると、TSV 形式のファイルで出力できる。
* 参考サイト:
* [[https://note.nkmk.me/python-pandas-read-csv-tsv/ | pandasでcsv/tsvファイル読み込み(read_csv, read_table) | Python / note.nkmk.me]]
* [[https://note.nkmk.me/python-pandas-to-csv/ | pandasでcsvファイルの書き出し・追記(to_csv) | Python / note.nkmk.me]]
{{tag>プログラミング}}