R逆引きハンドブックのMatrixの章をPandasで。
作者の書いた本はオススメ
データフレームを作成する
>>> pd.DataFrame([[1,2,3],[4,5,6]]) 0 1 2 0 1 2 3 1 4 5 6
データフレームに列名と行名を追加
>>> x = pd.DataFrame([[1,2,3],[4,5,6]]) >>> pd.DataFrame([[1,2,3],[4,5,6]]) 0 1 2 0 1 2 3 1 4 5 6 >>> x = pd.DataFrame([[1,2,3],[4,5,6]]) >>> x 0 1 2 0 1 2 3 1 4 5 6 >>> x.index = list("ab") >>> x.columns = list("cde") >>> x c d e a 1 2 3 b 4 5 6
データフレームの列にアクセスする
>>> x = pd.DataFrame([[1,2,3],[4,5,6]], index=list("ab"), columns=list("cde")) >>> x c d e a 1 2 3 b 4 5 6 >>> x["c"] a 1 b 4 Name: c, dtype: int64 >>> x.c a 1 b 4 Name: c, dtype: int64
Seriesが返ってくるのでメソッドもよべる
>>> x.c.mean() 2.5 >>> x.c.sum() 5
データフレームに要素を追加する
>>> x = pd.DataFrame([[1,2,3],[4,5,6]], index=list("ab"), columns=list("cde")) >>> y = pd.Series([7,8,9], index=list("cde")) >>> x.append(y, ignore_index=True) c d e 0 1 2 3 1 4 5 6 2 7 8 9
データフレームを結合する
rbind
::: python >>> x 0 1 0 1 0 1 -2 3 >>> x.append(x) 0 1 0 1 0 1 -2 3 0 1 0 1 -2 3 >>> pd.concat([x, x], axis=0) 0 1 0 1 0 1 -2 3 0 1 0 1 -2 3
cbind
::: python >>> pd.concat([x, x], axis=1) 0 1 0 1 0 1 0 1 0 1 -2 3 -2 3
データフレームから一部を抽出する
ggplotの組込みデータを使う。 wt>3のname,disp列を抽出
>>> from ggplot import mtcars >>> mtcars[mtcars.wt > 3][["name","disp"]] name disp 3 Hornet 4 Drive 258.0 4 Hornet Sportabout 360.0 5 Valiant 225.0 6 Duster 360 360.0 7 Merc 240D 146.7 8 Merc 230 140.8 9 Merc 280 167.6 10 Merc 280C 167.6 11 Merc 450SE 275.8 12 Merc 450SL 275.8 13 Merc 450SLC 275.8 14 Cadillac Fleetwood 472.0 15 Lincoln Continental 460.0 16 Chrysler Imperial 440.0 21 Dodge Challenger 318.0 22 AMC Javelin 304.0 23 Camaro Z28 350.0 24 Pontiac Firebird 400.0 28 Ford Pantera L 351.0 30 Maserati Bora 301.0
データフレームの列を変換する
transform
>>> x = pd.DataFrame([(1,2),(3,4),(5,6),(7,8)]) >>> x 0 1 0 1 2 1 3 4 2 5 6 3 7 8 >>> x[2] = x[0]+2 >>> x 0 1 2 0 1 2 3 1 3 4 5 2 5 6 7 3 7 8 9
因子ごとに組み合わせを作成する
R expand.grid() function in Python
データフレームの列や行ごとの合計を求める
::: python >>> x 0 1 2 0 1 2 3 1 4 5 6 2 7 8 9 >>> x.sum(axis=0) 0 12 1 15 2 18 dtype: int64 >>> x.sum(axis=1) 0 6 1 15 2 24 dtype: int64
データフレームの列ごとに関数を適用する
>>> x = pd.DataFrame([(1,2),(3,4),(5,6),(7,8)]) >>> x.apply(sum) 0 16 1 20 dtype: int64
データフレームから欠損値を取り除く
>>> x = pd.DataFrame([(1,2),(3,np.nan),(np.nan,6),(7,8)]) >>> x 0 1 0 1 2 1 3 NaN 2 NaN 6 3 7 8 >>> x.dropna() 0 1 0 1 2 3 7 8
データフレームの列を分解、統合する
multiindex便利
>>> x = pd.DataFrame([(1,"Y"),(3,"N"),(6,"N"),(7,"Y")]) >>> x 0 1 0 1 Y 1 3 N 2 6 N 3 7 Y >>> y = x.groupby(1) >>> y.head() 0 1 1 N 1 3 N 2 6 N Y 0 1 Y 3 7 Y >>> y.mean() 0 1 N 4.5 Y 4.0
縦長形式のデータフレームを横長形式に変換する
>>> x = pd.DataFrame([(1,0,1),(1,1,2),(1,2,0),(2,0,1),(2,1,1),(2,2,3),(3,0,0),(3,1,1),(3,2,2)], columns=["subject","time","conc"]) >>> x subject time conc 0 1 0 1 1 1 1 2 2 1 2 0 3 2 0 1 4 2 1 1 5 2 2 3 6 3 0 0 7 3 1 1 8 3 2 2 >>> x.pivot(index="time", columns="subject") conc subject 1 2 3 time 0 1 1 0 1 2 1 1 2 0 3 2
データフレームを分割する
groupby
データフレームを並べ替える
>>> x = pd.DataFrame([(1,0,1),(1,1,2),(1,2,0),(2,0,1),(2,1,1),(2,2,3),(3,0,0),(3,1,1),(3,2,2)], columns=["subject","time","conc"]) >>> x subject time conc 0 1 0 1 1 1 1 2 2 1 2 0 3 2 0 1 4 2 1 1 5 2 2 3 6 3 0 0 7 3 1 1 8 3 2 2 >>> x.sort("time") subject time conc 0 1 0 1 3 2 0 1 6 3 0 0 1 1 1 2 4 2 1 1 7 3 1 1 2 1 2 0 5 2 2 3 8 3 2 2