2013-12-17 196 views
18

我轉換一個熊貓DF至r使用以下:熊貓 - 如何將r數據框轉換回熊貓?

import pandas as pd 
import pandas.rpy.common as com 
import rpy2.robjects as ro 
from rpy2.robjects.packages import importr 
rdf = com.convert_to_r_dataframe(df) 

如何轉換RDF回大熊貓DF?

df = f(rdf) ? 
+0

'pandas.rpy'在大熊貓0.20除去 –

回答

7

鑑於你的進口,這似乎是:

com.convert_robj(rdf) 

例如,

In [480]: dfrm 
Out[480]: 
      A   B C 
0 0.454459 49.916767 1 
1 0.943284 50.878174 1 
2 0.974856 50.335679 2 
3 0.776600 50.782104 1 
4 0.553895 50.084505 1 
5 0.514018 50.719019 2 
6 0.915413 50.513962 0 
7 0.771571 49.859855 2 
8 0.068619 49.409657 0 
9 0.728141 50.945174 2 
10 0.388115 47.879653 1 
11 0.960172 49.680258 0 
12 0.015216 50.067968 0 
13 0.495024 50.286287 1 
14 0.565954 49.909771 1 
15 0.992279 49.009696 1 
16 0.179934 49.554256 0 
17 0.521243 47.854791 0 
18 0.551241 51.076262 1 
19 0.713271 49.418503 0 
20 0.801716 50.660304 1 

In [481]: rdfrm = com.convert_to_r_dataframe(dfrm) 

In [482]: rdfrm 
Out[482]: 
<DataFrame - Python:0x14905cf8/R:0x1600ee98> 
[FloatVector, FloatVector, IntVector] 
    A: <class 'rpy2.robjects.vectors.FloatVector'> 
    <FloatVector - Python:0xf9d0b00/R:0x140e2620> 
[0.454459, 0.943284, 0.974856, ..., 0.551241, 0.713271, 0.801716] 
    B: <class 'rpy2.robjects.vectors.FloatVector'> 
    <FloatVector - Python:0xf9d0878/R:0x125aa240> 
[49.916767, 50.878174, 50.335679, ..., 51.076262, 49.418503, 50.660304] 
    C: <class 'rpy2.robjects.vectors.IntVector'> 
    <IntVector - Python:0x11fceef0/R:0x13f0d918> 
[  1,  1,  2, ...,  1,  0,  1] 

In [483]: com.convert_robj(rdfrm) 
Out[483]: 
      A   B C 
0 0.454459 49.916767 1 
1 0.943284 50.878174 1 
2 0.974856 50.335679 2 
3 0.776600 50.782104 1 
4 0.553895 50.084505 1 
5 0.514018 50.719019 2 
6 0.915413 50.513962 0 
7 0.771571 49.859855 2 
8 0.068619 49.409657 0 
9 0.728141 50.945174 2 
10 0.388115 47.879653 1 
11 0.960172 49.680258 0 
12 0.015216 50.067968 0 
13 0.495024 50.286287 1 
14 0.565954 49.909771 1 
15 0.992279 49.009696 1 
16 0.179934 49.554256 0 
17 0.521243 47.854791 0 
18 0.551241 51.076262 1 
19 0.713271 49.418503 0 
20 0.801716 50.660304 1 

隨着文檔:

In [475]: com.convert_robj? 
Type:  function 
String Form:<function convert_robj at 0x13e85848> 
File:  /mnt/epd/7.3-2_pandas0.12/lib/python2.7/site-packages/pandas/rpy/common.py 
Definition: com.convert_robj(obj, use_pandas=True) 
Docstring: 
Convert rpy2 object to a pandas-friendly form 

Parameters 
---------- 
obj : rpy2 object 

Returns 
------- 
Non-rpy data structure, mix of NumPy and pandas objects 
14

轉換數據幀之間來回rpy2pandas將在rpy2版本2.4.0,並應高度自動化(無需顯式轉換,它會在飛行中進行)

from rpy2.robjects import pandas2ri 
pandas2ri.activate() 

如果希望顯式地轉換爲任何原因,功能pandas2ri.py2ri()pandas2ri.ri2py()(它們是pandas2ri.pandas2ri()pandas2ri.ri2pandas())。

7

正如lgautier所建議的那樣,可以使用pandas2ri來完成。

這裏是轉換RPY數據幀(rdf)到數據幀大熊貓示例代碼(pd_df):

from rpy2.robjects import pandas2ri 

pd_df = pandas2ri.ri2py_dataframe(rdf)