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])
- スライスで必ず、始点と終点を指定する
- カラムと同時に指定する場合は、カラム、行の順番で。
データの追加
- カラムの追加
data_frame[NEW_COLUMN] = [DATA1, DATA2, DATA3, ...]
NEW_COLUMN
: 新しく追加するカラム名DATA1, DATA2, …
: 追加するデータはリストで渡す- 次元が合わない場合は、エラーになる
- 参考サイト: pandasの基本操作 - Qiita
- 行の追加
data_frame = data_frame.append(DATA_FRAME)
DATA_FRAME
: 追加するデータが入った pandas のデータフレーム- 次元が合わない場合は、
NaN
となる。 - 返り値を受け取る形で更新する。
- 参考サイト: pandasの基本操作 - Qiita
- データフレームの追加
- 横に結合 (カラムの追加)
DATA_FRAME = pd.concat([DATA_FRAME1, DATA_FRAME2, ...], axis = 1)
- 縦に結合 (行の追加)
DATA_FRAME = pd.concat([DATA_FRAME1, DATA_FRAME2, ...])
- データの欠損は
NaN
扱いとなる。NaN
を置換するには.fillna()
を使う。
DATA_FRAME.fillna("")
- 上記の例では、
NaN
が空の文字列に置換される。
値の取得・変更
- 行ラベルと列ラベルで指定した値を取得
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
: 新しい値
データフレームのサイズ確認
- 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 形式のファイルで出力できる。
- 参考サイト: