我以前从未使用过rpy2,但我只是想知道是否可以用它来保存R-readable文件中的python对象(pandas DataFrame)。我在这些环境之间移动对象时遇到了麻烦,主要是因为我使用的是Windows而且数据源是Excel文件。是的,包含带有文本的单元格的类型,包括引号,换行符以及CSV无法充分处理的所有内容。
我通常依赖XLConnectJars,但它似乎已被打破
Installing package(s) into ‘C:/Program Files/R/library’
(as ‘lib’ is unspecified)
trying URL 'http://cran.csiro.au/bin/windows/contrib/2.15/XLConnectJars_0.2-4.zip'
Content type 'application/zip' length 16538311 bytes (15.8 Mb)
opened URL
downloaded 15.3 Mb
Warning in install.packages :
downloaded length 16011264 != reported length 16538311
pandas正确读取它,但我需要使用R中的信息。
答案 0 :(得分:7)
您可以使用rpy2执行此操作。在熊猫中获得数据后,必须将其传输到R. This link提供Python Pandas和R data.frames之间的实验接口。从网站复制的代码示例:
from pandas import DataFrame
import pandas.rpy.common as com
df = DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C':[7,8,9]},
index=["one", "two", "three"])
r_dataframe = com.convert_to_r_dataframe(df)
print type(r_dataframe)
<class 'rpy2.robjects.vectors.DataFrame'>
print r_dataframe
A B C
one 1 4 7
two 2 5 8
three 3 6 9
答案 1 :(得分:4)
以下是使用.RData
编写/读取rpy2
个文件的方法(因为已弃用的解决方案已被弃用,并且未显示如何保存到.RData
文件):
import rpy2
from rpy2 import robjects
from rpy2.robjects import pandas2ri
pandas2ri.activate()
# read .RData file as a pandas dataframe
def load_rdata_file(filename):
r_data = robjects.r['get'](robjects.r['load'](filename))
df = pandas2ri.ri2py(r_data)
return df
# write pandas dataframe to an .RData file
def save_rdata_file(df, filename):
r_data = pandas2ri.py2ri(df)
robjects.r.assign("my_df", r_data)
robjects.r("save(my_df, file='{}')".format(filename))
答案 2 :(得分:1)
使用rpy2
的最新版本3.3.2,我无法获得其他答案。看来现在转换的工作方式有所不同。
import pandas
p_df = pandas.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})
以下代码将上述熊猫数据帧转换为R数据帧,并将R数据帧另存为R .rds
文件。
from rpy2 import robjects
from rpy2.robjects import pandas2ri
from rpy2.robjects.conversion import localconverter
# Convert pandas dataframe to R dataframe
with localconverter(robjects.default_converter + pandas2ri.converter):
r_df = robjects.conversion.py2rpy(p_df)
# Save R dataframe as .rds file
r_file = "file.rds"
robjects.r.assign("my_df_tosave", r_df)
robjects.r(f"saveRDS(my_df_tosave, file='{r_file}')")
以下代码将加载.rds
文件,并将其转换回熊猫数据框。
# Load as R dataframe from .rds file
r_file = "file.rds"
robjects.r(f"df_to_load <- readRDS('{r_file}')")
r_df = robjects.r["df_to_load"]
# Convert R dataframe to pandas dataframe
with localconverter(robjects.default_converter + pandas2ri.converter):
p_df = robjects.conversion.rpy2py(r_df)