pandas
import pandas as pdデータ型
サンプルデータ
df = pd.DataFrame([
{"column1": 1, "column2": 2},
{"column1": 3, "column2": 4},
])型を確認する
df.dtypescolumn1 int64
column2 int64
dtype: object結果はSeriesとなる。
型を変換する(一括)
_df = df.astype("str")
_df.dtypescolumn1 object
column2 object
dtype: object型を変換する(個別)
なお、文字列で指定しても解釈してくれる
NumPyの型も解釈可能。
置換
サンプルデータ
辞書型で置換可能。
Seriesに対しても可能。
カラム名を置き換える場合は、キーワード引数でcolumnsを使用する。
抽出(query)
user_idが重複しているレコードを抽出する例。
","で結合して、queryのinで抽出する。
カラムの並び替え
並び変えたカラムを[]に入れるだけで良い。
group集計して統計量を計算する。
既に準備されている統計計算をする場合
自作でpersentileなどを計算したい場合
時系列データを集計する場合
時刻情報がある場合、その列をindexにすることで、resampleが使えて集計できる。
購入量の時系列データのイメージで以下は'M'で月ごとの結果を集計する例。
行を挿入する。
seriesをappendする。
dictをappendする。
列毎の欠損数を求める。
applyの使用法まとめ
以下ノートブック参照
query記法を使った条件抽出
カラム名に空白のある場合はバッククォートを使う。
placeholderは、f-stringでもかけるが、@の方が汎用性が高い。
時刻系のデータをquery記法で処理
たとえばtimedeltaを数値として扱いたい場合などは、datetime.timedeltaと併せて使う。
read_csvで型指定
dictで各列の型を指定できる。
日付等は以下のように後変換する。
抽出して新しい列を作る
rank: 順位を付ける
unique: 出現する種類を把握する
value_counts: 内訳を知る
その他のオプション
normalize=Trueで比率を計算できる。bins=30で連続値も集計できる。dropna=TrueでNaNを無視できる。
sort_values: 並べ替え
isnull(): 欠損値かどうかを調べる
dropna(): 欠損値を削除する
通常は一つでも欠損がある場合は削除される。
どこかの列に基づきたい場合は、subsetで指定する。
欠損値を列毎に修正する
locとilocの違い
locはindex(いわゆるDataFrameのIndex), column名でアクセスする。
ilocは本当のindex番号で縦横ともにアクセスする。
なのでilocを使えば、reset_index(drop=True)しなくてもアクセスしたいものにアクセスできるかもしれない
merge: joinしたいとき
だいたいこんな感じの書き方におさまる。
複数をキーにjoinしたい場合は、
on=['column1', 'column2']とすればOK。join後に重複するカラム名は、
suffixes=['_left', '_right']と指定すれば末尾に目印をつけられる。
groupby + agg: 集約したいとき
だいたいこんな感じの書き方におさまる。
grouby + transform: 集約したものを各行に割り当てる
集約となるmeanやsumは、transformにより行を元のDFに拡張することができる。
groupby + shift, rank: 集約でない場合のgroupby + 各行割り当て
transformとかも選択肢にでてくるけど、使わなくても行ける。
集約ではなく、shiftやrankなどの場合はこの方法が使える。
idxmin: 最小値の時のPandas Indexを得る
drop_duplicates: 重複を削除する
残すものをコントロールするためには、事前にsort_valuesしておく感じの使い方となる。
duplicated: 重複の判定
ほぼdrop_duplicatedと同じ。
抽出の場合はこうする
より高度な最適化
https://www.aidancooper.co.uk/pandas-anti-patterns/
再代入をせず、chain or pipeを使う
forではなくapplyを使う
applyをさらに最適化するには、np.select, np.whereを使う
data typeを最適にする(カテゴリ型をstrにしない)
Last updated