Pandasのメモ
Pandasのメモ.
目次
インポート
pip install pandas |
import pandas as pd |
シリーズ
行はインデックス
pd.Series(リスト, index=行名のリスト) |
インデックスの取得
s = pd.Series([1, 2], index=['a', 'b']) |
データフレーム
行はインデックス,列はカラム.
行単位のリストから生成する場合,
pd.DataFrame([行1のリスト, 行2のリスト, …], index=行名のリスト, columns=列名のリスト) |
列単位のリストから生成する場合,
data = {'列名1': 列1のリスト, '列名2': 列2のリスト} |
カラムの取得
df = pd.DataFrame([[1, -1], [2, -2], [3, -3]], index=['one', 'two', 'three'], columns=['pos', 'neg']) |
行の取得
df.loc[インデックス名] |
df.iloc[インデックス番号] |
セルの取得
df.at[インデックス名, カラム名] |
df.iat[インデックス番号, カラム番号] |
インポート・エクスポート
CSV
pd.read_csv(パス) |
TSV
pd.read_csv(パス, sep='\t', header=None) #ヘッダなしTSVの読み込み |
SQL
pd.read_sql(sql, conn) |
クリップボード
pd.read_clipboard() |
ソート
df.sort_values(['col1_name', 'col2_name'], ascending=[True, False]) |
とすると,col1を昇順に並べた上で,col2を降順にする.
フィルタ
bool型シーケンスの条件で
df[条件] |
とすればフィルタされる.
条件には例えばaという名前の列を持つ場合,
条件 = (df.a > 10) |
や
条件 = df.a.str.contains('正規表現') |
も指定できる.
置換
df.replace('置換前', '置換後', regex=True) |
Null
Null値の存在確認
Null値の存在確認だけしたい場合は次のようにする.
pd.isnull(df).any() |
Null値を指定した値で置換
Nullを0で置換するなら,
df.fillna(0) |
Null値を含む行を無視する
次でNull値の存在する行以外を取り出せる.
df.dropna() |
集計
関数
df.describe() |
で以下の関数を集計して表示する.
- count()
- mean()
- std()
- min()
- df.quantile(0.25)
- df.quantile(0.50)
- df.quantile(0.75)
- max()
その他の関数には次のようなものがある.
- median()
- mode()
- var()
- sample(n):無作為な順でn件のデータ
- head(n):先頭n件のデータ
- tail(n):末尾n件のデータ
集約
df.groupby(カラムのリスト).関数 |
とすることで集約後に関数を適用できる.
ピボットテーブル
カラム1, 2をそれぞれ縦軸,横軸とした表を作り,カラム3のデータを指定した関数によって集計した上でセルに配置するには
df.pivot_table(index=カラム1のリスト, columns=カラム2のリスト, vaues='カラム3の名称', aggfunc=関数) |
とする.