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

Tam*_*mpa 33 python r pandas

我使用下面的方法将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)
Run Code Online (Sandbox Code Playgroud)

如何将rdf转换回pandas df?

df = f(rdf) ?
Run Code Online (Sandbox Code Playgroud)

lga*_*ier 26

由于rpy2版本2.4.0之间来回转换数据帧rpy2,pandas因此作为可选模块包含在内.有了它,无需明确转换,它将在运行中完成.

该文档包含示例(也可作为Jupyter笔记本 - 链接在页面顶部附近提供):https://rpy2.github.io/doc/latest/html/pandas.html#interoperability-with-pandas

注意:此问题的原始答案建议如下.

from rpy2.robjects import pandas2ri
pandas2ri.activate()
Run Code Online (Sandbox Code Playgroud)

如果希望因任何原因明确转换,则函数是pandas2ri.py2ri()pandas2ri.ri2py()(它们是pandas2ri.pandas2ri()pandas2ri.ri2pandas()).


小智 12

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

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

from rpy2.robjects import pandas2ri

pd_df = pandas2ri.ri2py_dataframe(rdf)
Run Code Online (Sandbox Code Playgroud)


ely*_*ely 10

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

com.convert_robj(rdf)
Run Code Online (Sandbox Code Playgroud)

例如,

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
Run Code Online (Sandbox Code Playgroud)

随着文档:

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
Run Code Online (Sandbox Code Playgroud)


Roc*_*ira 6

使用 pandas 读取 rpy2 数据帧,r_df. 它将避免弃用警告“FutureWarning:from_items 已弃用。请使用 DataFrame.from_dict(dict(items), ...) 代替”

type(r_df)是“rpy2.robjects.vectors.DataFrame”。
type(pd_df)是“pandas.core.frame.DataFrame”

pd_df = pd.DataFrame.from_dict({ key : np.asarray(r_df.rx2(key)) for key in r_df.names })