Python Pandas 转 R 数据框
我想把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 个回答
一旦你有了数据框(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')
如果标准的文本格式(比如csv)太慢或者太大,我推荐使用feather,这是一种基于Apache Arrow的序列化格式。它是由RStudio、ggplot2等的创始人(Hadley Wickham)和pandas的创始人(Wes McKinney)专门开发的,目的是为了提高性能,并让Python和R之间更好地互通(详细信息可以查看这里)。
你需要安装pandas版本0.20.0或更高版本,使用命令pip install feather-format
,然后就可以用to_feather
和read_feather
来替代to_csv
和read_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()
),这是一种快速且简单的替代方案,可以用来替代csv
、pickle
等格式。
编辑:今天(2022年6月),feather的开发已经转移到arrow上。这意味着你不应该再使用feather
库,而是使用arrow
。
library(arrow)
df <- arrow::read_feather('filename.feather')
最近的文档中有一部分讲到了如何与 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)