Python Pandas 转 R 数据框

21 投票
3 回答
31089 浏览
提问于 2025-04-18 08:57

我想把Python中的pandas数据框转换成R中的数据框。

为了解决这个问题,我找到了一些库

http://pandas.pydata.org/pandas-docs/stable/r_interface.html

其中一个是rpy2

但是我找不到保存或者转移到R的方法。

首先我试了“to_csv”

df_R = com.convert_to_r_dataframe(df_total)
df_R.to_csv(direc+"/qap/detail_summary_R/"+"distance_"+str(gp_num)+".csv",sep = ",")

但是它给了我一个错误

"AttributeError: 'DataFrame' object has no attribute 'to_csv'  "

所以我试着查看它的数据类型,结果是

<class 'rpy2.robjects.vectors.DataFrame'>

我该如何把这个类型的对象保存为csv文件或者转移到R呢?

3 个回答

7

一旦你有了数据框(data.frame),你可以使用 write.table 来保存它,或者用它的其他一些简化版本,比如 write.csv

在 rpy2 中:

import rpy2.robjects as robjects
## get a reference to the R function 
write_csv = robjects.r('write.csv')
## save 
write_csv(df_R,'filename.csv')
20

如果标准的文本格式(比如csv)太慢或者太大,我推荐使用feather,这是一种基于Apache Arrow的序列化格式。它是由RStudio、ggplot2等的创始人(Hadley Wickham)和pandas的创始人(Wes McKinney)专门开发的,目的是为了提高性能,并让Python和R之间更好地互通(详细信息可以查看这里)。

你需要安装pandas版本0.20.0或更高版本,使用命令pip install feather-format,然后就可以用to_featherread_feather来替代to_csvread_csv了:

df_R.to_feather('filename.feather')
df_R = pd.read_feather('filename.feather')

R中,使用feather这个包的对应操作是

df <- feather::read_feather('filename.feather')
feather::write_feather(df, 'filename.feather')

除了几个小调整(比如你不能在feather中保存自定义的DataFrame索引,所以你需要先调用df.reset_index()),这是一种快速且简单的替代方案,可以用来替代csvpickle等格式。

编辑:今天(2022年6月),feather的开发已经转移到arrow上。这意味着你不应该再使用feather库,而是使用arrow

library(arrow)
df <- arrow::read_feather('filename.feather')
18

最近的文档中有一部分讲到了如何与 pandas 进行交互,具体可以查看这个链接:https://rpy2.github.io/doc/v3.2.x/html/generated_rst/pandas.html

另外,类型为 rpy2.robjects.vectors.DataFrame 的对象有一个方法叫 to_csvfile,而不是 to_csv

你可以在这里找到更多信息:https://rpy2.github.io/doc/v3.2.x/html/vector.html#rpy2.robjects.vectors.DataFrame.to_csvfile

如果你想在 Python 和 R 之间传递数据,其实有比写和读 CSV 文件更高效的方法。可以试试转换系统:

from rpy2.robjects import pandas2ri
pandas2ri.activate()

from rpy2.robjects.packages import importr

base = importr('base')
# call an R function on a Pandas DataFrame
base.summary(my_pandas_dataframe)

撰写回答