import pandas as pd
import numpy as np
import rpy2
import rpy2.robjects.conversion as conversion
from rpy2.robjects import pandas2ri
import pandas.rpy.common as com
pandas2ri.activate()
rpy2.__version__
'2.5.6'
df = pd.DataFrame({'col_a':[1,2,3], 'col_b':[0.1,0.2,0.4], 'col_c':['a','b','c']}, index=[3,4,5])
df
col_a | col_b | col_c | |
---|---|---|---|
3 | 1 | 0.1 | a |
4 | 2 | 0.2 | b |
5 | 3 | 0.4 | c |
rdf1 = com.convert_to_r_dataframe(df)
rdf2 = conversion.py2ri(df)
rdf1
<DataFrame - Python:0x7f365eb36bd8 / R:0x48c8e10> [IntVector, FloatVector, StrVector] col_a: <class 'rpy2.robjects.vectors.IntVector'> <IntVector - Python:0x7f365eb573f8 / R:0x3316338> [ 1, 2, 3] col_b: <class 'rpy2.robjects.vectors.FloatVector'> <FloatVector - Python:0x7f365eb574d0 / R:0x48de810> [0.100000, 0.200000, 0.400000] col_c: <class 'rpy2.robjects.vectors.StrVector'> <StrVector - Python:0x7f365eb575a8 / R:0x48de738> [str, str, str]
rdf2
<DataFrame - Python:0x7f365eb36ef0 / R:0x4ab41b8> [Array, Array, FactorVector] col_a: <class 'rpy2.robjects.vectors.Array'> <Array - Python:0x7f365eb57830 / R:0x32bff68> [ 1, 2, 3] col_b: <class 'rpy2.robjects.vectors.Array'> <Array - Python:0x7f365eb57908 / R:0x4aab6b8> [0.100000, 0.200000, 0.400000] col_c: <class 'rpy2.robjects.vectors.FactorVector'> <FactorVector - Python:0x7f365eb579e0 / R:0x3d52298> [ 1, 2, 3]
conversion.ri2py(rdf1)
col_a | col_b | col_c | |
---|---|---|---|
0 | 1 | 0.1 | a |
1 | 2 | 0.2 | b |
2 | 3 | 0.4 | c |
conversion.ri2py(rdf2)
col_a | col_b | col_c | |
---|---|---|---|
0 | 1 | 0.1 | a |
1 | 2 | 0.2 | b |
2 | 3 | 0.4 | c |
com.convert_robj(rdf1)
col_a | col_b | col_c | |
---|---|---|---|
3 | 1 | 0.1 | a |
4 | 2 | 0.2 | b |
5 | 3 | 0.4 | c |
com.convert_robj(rdf2)
col_a | col_b | col_c | |
---|---|---|---|
3 | 1 | 0.1 | a |
4 | 2 | 0.2 | b |
5 | 3 | 0.4 | c |
conversion.ri2py(conversion.py2ri(df.index))
array([3, 4, 5], dtype=int32)
ri2py
df = pd.DataFrame({'col_a':[1,2,3], 'col_b':[0.1,np.nan,0.4], 'col_c':['a','b','c']}, index=[3,4,5])
rdf1 = com.convert_to_r_dataframe(df)
rdf2 = conversion.py2ri(df)
rdf1
<DataFrame - Python:0x7f365eb61ab8 / R:0x4abccd0> [IntVector, FloatVector, StrVector] col_a: <class 'rpy2.robjects.vectors.IntVector'> <IntVector - Python:0x7f3660af5b00 / R:0x34322c0> [ 1, 2, 3] col_b: <class 'rpy2.robjects.vectors.FloatVector'> <FloatVector - Python:0x7f3660af5950 / R:0x4abdad8> [0.100000, NA_real_, 0.400000] col_c: <class 'rpy2.robjects.vectors.StrVector'> <StrVector - Python:0x7f3660af5dd0 / R:0x4abda00> [str, str, str]
rdf2
<DataFrame - Python:0x7f365eb613b0 / R:0x4ad7c38> [Array, Array, FactorVector] col_a: <class 'rpy2.robjects.vectors.Array'> <Array - Python:0x7f3660af5f80 / R:0x348f0c0> [ 1, 2, 3] col_b: <class 'rpy2.robjects.vectors.Array'> <Array - Python:0x7f3660af5f38 / R:0x4ad7628> [0.100000, nan, 0.400000] col_c: <class 'rpy2.robjects.vectors.FactorVector'> <FactorVector - Python:0x7f3660af5c68 / R:0x330a138> [ 1, 2, 3]
conversion.ri2py(rdf1)
col_a | col_b | col_c | |
---|---|---|---|
0 | 1 | 0.1 | a |
1 | 2 | NaN | b |
2 | 3 | 0.4 | c |
conversion.ri2py(rdf2)
col_a | col_b | col_c | |
---|---|---|---|
0 | 1 | 0.1 | a |
1 | 2 | NaN | b |
2 | 3 | 0.4 | c |
com.convert_robj(rdf1)
col_a | col_b | col_c | |
---|---|---|---|
3 | 1 | 0.1 | a |
4 | 2 | NaN | b |
5 | 3 | 0.4 | c |
com.convert_robj(rdf2)
col_a | col_b | col_c | |
---|---|---|---|
3 | 1 | 0.1 | a |
4 | 2 | NaN | b |
5 | 3 | 0.4 | c |
%load_ext rpy2.ipython
%R -i df
%R -o df
%%R -o x
x <- c(1,2,3)
x
<FloatVector - Python:0x7f3660a7ebd8 / R:0x4c05820> [1.000000, 2.000000, 3.000000]
%%R -o df3
df3 <- data.frame(a=c(1,2,3), b=c('a', 'e', 'f'))
df3
<DataFrame - Python:0x7f3660a7e7a0 / R:0x333c260> [FloatVector, FactorVector] a: <class 'rpy2.robjects.vectors.FloatVector'> <FloatVector - Python:0x7f365eb57560 / R:0x4c09dd8> [1.000000, 2.000000, 3.000000] b: <class 'rpy2.robjects.vectors.FactorVector'> <FactorVector - Python:0x7f3660a95e18 / R:0x3a171d8> [ 1, 2, 3]
conversion.ri2py(df3)
a | b | |
---|---|---|
0 | 1 | a |
1 | 2 | e |
2 | 3 | f |
%Rpull df3
df3
<DataFrame - Python:0x7f365ead5950 / R:0x333c260> [FloatVector, FactorVector] a: <class 'rpy2.robjects.vectors.FloatVector'> <FloatVector - Python:0x7f365eaed7e8 / R:0x4c09dd8> [1.000000, 2.000000, 3.000000] b: <class 'rpy2.robjects.vectors.FactorVector'> <FactorVector - Python:0x7f365eaed908 / R:0x3ea54b0> [ 1, 2, 3]