論理の流刑地

地獄の底を、爆笑しながら闊歩する

【備忘】Rで作ったデータフレームをPythonで使う時の手順

自分用備忘記事。
意外と該当する記事が(日本語で)なかった*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

ええ感じになっている。


www.youtube.com

Enjoy!!

*1:初歩的すぎて誰もわざわざ記事にしてない説はある

*2:定年退職した視覚障がい者の方が書いたページらしい。単純にすごいし尊敬する。

*3:これがわからなくて無為な時間を過ごした阿呆が私である