熊猫 - 如何将r数据帧转换回熊猫?

时间:2022-01-20 18:18:07

I converted a pandas df to r using the the below:

我使用下面的方法将pandas df转换为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)

How do I convert rdf back to a pandas df?

如何将rdf转换回pandas df?

df = f(rdf) ?

3 个解决方案

#1


15  

Converting data frames back and forth between rpy2 and pandas will be in the rpy2 release 2.4.0, and should be largely automated (no need to convert explicitly, it will be done on the fly)

在rpy2和pandas之间来回转换数据帧将在rpy2版本2.4.0中,并且应该在很大程度上自动化(不需要明确转换,它将在运行中完成)

from rpy2.robjects import pandas2ri
pandas2ri.activate()

If wishing to convert explicitly for any reason, the functions are pandas2ri.py2ri() and pandas2ri.ri2py() (they were pandas2ri.pandas2ri() and pandas2ri.ri2pandas()).

如果希望因任何原因显式转换,则函数为pandas2ri.py2ri()和pandas2ri.ri2py()(它们是pandas2ri.pandas2ri()和pandas2ri.ri2pandas())。

#2


9  

As suggested by lgautier, it can be done with pandas2ri.

正如lgautier所建议的,它可以用pandas2ri完成。

Here is sample code for convert rpy dataframe (rdf) to pandas dataframe (pd_df):

以下是将rpy数据帧(rdf)转换为pandas dataframe(pd_df)的示例代码:

from rpy2.robjects import pandas2ri

pd_df = pandas2ri.ri2py_dataframe(rdf)

#3


7  

Given your import, it appears it is:

鉴于您的导入,它似乎是:

com.convert_robj(rdf)

For example,

例如,

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

With docs:

随着文档:

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

#1


15  

Converting data frames back and forth between rpy2 and pandas will be in the rpy2 release 2.4.0, and should be largely automated (no need to convert explicitly, it will be done on the fly)

在rpy2和pandas之间来回转换数据帧将在rpy2版本2.4.0中,并且应该在很大程度上自动化(不需要明确转换,它将在运行中完成)

from rpy2.robjects import pandas2ri
pandas2ri.activate()

If wishing to convert explicitly for any reason, the functions are pandas2ri.py2ri() and pandas2ri.ri2py() (they were pandas2ri.pandas2ri() and pandas2ri.ri2pandas()).

如果希望因任何原因显式转换,则函数为pandas2ri.py2ri()和pandas2ri.ri2py()(它们是pandas2ri.pandas2ri()和pandas2ri.ri2pandas())。

#2


9  

As suggested by lgautier, it can be done with pandas2ri.

正如lgautier所建议的,它可以用pandas2ri完成。

Here is sample code for convert rpy dataframe (rdf) to pandas dataframe (pd_df):

以下是将rpy数据帧(rdf)转换为pandas dataframe(pd_df)的示例代码:

from rpy2.robjects import pandas2ri

pd_df = pandas2ri.ri2py_dataframe(rdf)

#3


7  

Given your import, it appears it is:

鉴于您的导入,它似乎是:

com.convert_robj(rdf)

For example,

例如,

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

With docs:

随着文档:

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