http://www.pwv.co.jp/~take/TakeWiki/index.php?sage%2FRとPandas%28Sage%29でのデータフレームの相互変換 %load_ext sage # RとPandasのデータフレームを相互に変換する方法 # Sageでは、numpyとpandasをインポート import pandas as pd import numpy as np # Rではjsonliteパッケージを使用 r('library(jsonlite)') # 例としてR Graphic Cookbookのデータを使用 #r("install.packages('gcookbook')") r('library(gcookbook)') # RからJSON形式でデータを持ってくる方法 # 例として、gcookbookのサンプルデータをRから取得する test_json = r('toJSON(heightweight, pretty=FALSE)') # heightweight = pd.read_json(sageobj(test_json)); heightweight.head() heightweight = pd.read_json(sageobj(test_json)['DATA']); heightweight.head() # sageobj(test_json); # sageobj(test_json)['DATA']; # これを関数にまとめる # Rのデータフレームをpandasのデータフレームに変換する def RDf2PandaDf(name): json_str = r('toJSON(%s, pretty=FALSE)' % name) return pd.read_json(sageobj(json_str)['DATA']) print RDf2PandaDf('heightweight').head() # 同様に関数にまとめる # pandasのデータフレームをRに渡す def PandaDf2RDf(df, name): l = [dict(zip(df.columns, x)) for x in df.values.tolist()] json_str = str(l) json_str = json_str.replace("'", '\\"') r('%s <- fromJSON("%s")' % (name, json_str)) # PandasのデータをRに渡す age = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32] sex = ['F', 'M', 'M', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'F', 'M'] df = pd.DataFrame({'age': age, 'sex': sex}); df.head() PandaDf2RDf(df, "a") r('a')