いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【Python】DataFrameをマルチにまとめたい

・お題:複数のDataFrameを纏めて、マルチインデックスやマルチカラムの一つのDataFrameとして扱いたい。

 

・pandasのDataFrameの扱い方がよく分からなかったので、少し調べてみた。すぐ忘れるので、メモしておく。

・とりあえず、csvをDataFrameとして読み込む。

import pandas as pd
df1=pd.read_csv("xxx_1.csv")

とすると、df1の中身は以下になる。

・デフォルトで読み込むと、indexに0から始まる整数が振られる。別にこれでも問題ないが、せっかくなので、CompoundとDoseをインデックスとして読み込む。

df1=pd.read_csv("xxx_1.csv",index_col=(0,1))

とすると、df1の中身は以下になる。

・ちなみに、df1=pd.read_csv("xxx_1.csv")としてDataFrameを読み込んだ後に、df1.set_index(["Compound","Dose"])としてindexを振ることもできる(結果は割愛)。

・次に、複数のDataFrameをマルチにまとめる方法を考える。

・まず、df2として、df1と似たような構成のcsvを読み込む。

df2=pd.read_csv("xxx_2.csv",index_col=(0,1))

df2の中身は以下。

・DataFrameをくっつけるなら、pd.concat()でいけそう。

pd.concat([df1,df2])

とすると、以下が返ってきた。concatはデフォルトだと縦にくっつけることになる。

 

・これだとdf1とdf2を区別してくっつけられていない。df1とdf2をkeysとしてくっつけ、マルチインデックスを1層追加したい。

pd.concat([df1,df2],keys=["df1","df2"])

とすると、以下が返ってくる。

・仮にここからdf1のみをとってきたいなら、これをdf3など名付けて、df3.loc["df1"]などすればdf1のデータのみを引っ張ってこれる。

・次に、マルチカラムでくっつける場合を考える。pd.concatはデフォルトが縦にくっつける感じだったので、横にくっつけたい場合は引数にaxis=1を加える。

pd.concat([df1,df2],axis=1)

とすると、以下が返ってくる。

・インデックスの場合と同様に、keysを指定してやれば、マルチカラムになる。

pd.concat([df1,df2],axis=1,keys=["df1","df2"])

・ちなみに、ここからdf2をとってきたい場合、これをdf3など名付けて、df3.loc[:,"df2"]などすればdf2のデータのみを引っ張ってこれる。

 

・縦持ちの表でずらっと処理した方が、ハンドリング自体は楽かもしれないなぁと少し思った。

 

おわり。