自分用備忘記事。
意外と該当する記事が(日本語で)なかった*1ので。
Motivation
Rのほうで色々作ったデータフレームをそのままPythonで使いたいときがある。
rpy2ライブラリを使うことになるのだが、Pythonそんなに普段使わないこともあって忘れそうなので、その手順を備忘。
まぁ一回csvにすればよくね?っていうのはもっともですし、そちらのほうがお行儀は良いんでしょうけど。
◆参考URL
How To
手順1:まずrpy2を使って、rで作成したデータフレームを読み込む
神がつくりたもうたrpy2を使う。
import pandas as pd import rpy2.robjects as rob #rpy2ライブラリを使用可能に #Rのほうでデータフレーム(ここでは2020のj1のデータ)を読みこむ load_str = ''' load("C:/Users/user1/R/01_data/j1_stat.dat") ''' rob.r(load_str) j1_stat_r = rob.r("j1_stat")
手順2:rpy2py()で変換
pandas2ri.activate()をして、自動でNumPyへの変換がなされるようにしてから
【注意】pandas2ri.activate()をしておかないとなんか勝手に行と列が逆転して死ぬ*3
from rpy2.robjects import pandas2ri #pandas2riを使えるようにする rob.pandas2ri.activate() j1_stat_p = rob.conversion.rpy2py(j1_stat_r) #Pythonで使えるように変換 j1_stat_p[["Club", "MatchDay","Opponent","Date"]].head(3) # Out[23]: # Club MatchDay Opponent Date # 1 kasw 1.0 sapp 18314.0 # 2 sapp 1.0 kasw 18314.0 # 3 y-fc 2.0 sapp 18447.0
ちゃんと変換できている...ぽいんだけど日付だけうまくいっていないので、これだけpython側で修正する
j1_stat_p["Date"] = j1_stat_p["Date"].astype("int") j1_stat_p["Date"]= pd.to_datetime( j1_stat_p["Date"] , unit="D") # Club MatchDay Opponent Date # 1 kasw 1.0 sapp 2020-02-22 # 2 sapp 1.0 kasw 2020-02-22 # 3 y-fc 2.0 sapp 2020-07-04
ええ感じになっている。
Enjoy!!