将Python Pandas转换为R数据框。

21

我要将Python pandas dataframe 转换为R中的dataframe。我找到了几个用于解决这个问题的库

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个回答

20
如果标准的文本格式(csv)过于缓慢或笨重,我建议使用feather,这是一个构建在Apache Arrow上的序列化格式。它是由RStudio/ggplot2等的创建者Hadley Wickham和pandas的创建者Wes McKinney明确开发的,用于Python和R之间的性能和互操作性(请参见此处)。 您需要pandas verson 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')

feather 包的 R 版本为:

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')

1
截至2020年3月,feather / pyarrow不支持包装稀疏矩阵的数据帧。 - Ben Whale
1
需要写入磁盘吗,还是可以将其序列化为二进制或文本(例如 SQL 服务器表中的字段)从 Python 到 R 反序列化? - dawid

18
最近的文档 https://rpy2.github.io/doc/v3.2.x/html/generated_rst/pandas.html 中有一个关于与 pandas 交互的部分。
否则,类型为 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)

7

一旦你有了数据框,就可以使用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')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接