如何将Python Dataframe转换为R data.frame

如何将Python Dataframe转换为R data.frame,python,r,dataframe,Python,R,Dataframe,我正在使用R软件包PythonInR,并希望使用函数pyGet()将pandas数据帧转换为R数据帧,但出现以下错误: as.data.frame.default(xi,optional=TRUE,stringsAsFactors=stringsAsFactors)中出错:无法将类“PythonObject”强制为data.frame text.csv文件仅包含两列:名称(字符串)和值(int)。 代码如下: library(PythonInR) pyConnect() pyIsConnec

我正在使用R软件包
PythonInR
,并希望使用函数
pyGet()
将pandas数据帧转换为R数据帧,但出现以下错误:

as.data.frame.default(xi,optional=TRUE,stringsAsFactors=stringsAsFactors)中出错:无法将类“PythonObject”强制为data.frame

text.csv文件仅包含两列:名称(字符串)和值(int)。 代码如下:

library(PythonInR) 
pyConnect() 
pyIsConnected() 
pyVersion()
pyOptions("usePandas", TRUE) 
pyImport("pandas", as="pd") 
test_code <-'py_df = pd.read_csv("test.csv")' 
pyExec(code = test_code) 
r_df <- pyGet("py_df")
库(pythoniner)
pyConnect()
pyIsConnected()
pyVersion()
pyOptions(“usePandas”,TRUE)
pyImport(“熊猫”,as=“pd”)

测试代码您可以使用json。熊猫数据帧有一个
to_json
方法,您可以使用
rjson
R包使用
fromJSON
读取json字符串


你也可能会发现它很有趣。计划很快提交给CRAN,但我需要做更多的测试。

很难说为什么它不起作用

您是否有可复制的示例,或者您是否可以提供“test.csv”。 如果你认为这是一个bug,你可以给包作者写封邮件

据我看,

sessionInfo()

## R version 3.4.0 (2017-04-21)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Debian GNU/Linux 8 (jessie)
## 
## Matrix products: default
## BLAS: /home/florian/bin/R_dev/lib/libRblas.so
## LAPACK: /home/florian/bin/R_dev/lib/libRlapack.so
## 
## locale:
##  [1] LC_CTYPE=de_AT.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=de_AT.UTF-8        LC_COLLATE=de_AT.UTF-8    
##  [5] LC_MONETARY=de_AT.UTF-8    LC_MESSAGES=de_AT.UTF-8   
##  [7] LC_PAPER=de_AT.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=de_AT.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] knitr_1.16      PythonInR_0.1-3
## 
## loaded via a namespace (and not attached):
## [1] compiler_3.4.0 magrittr_1.5   R6_2.2.1       markdown_0.8  
## [5] tools_3.4.0    stringi_1.1.5  pack_0.1-1     stringr_1.2.0 
## [9] evaluate_0.10
_

_

_

pyVersion()
## [1] "2.7.9 (default, Mar  1 2015, 13:01:26) \n[GCC 4.9.2]"
_

_

_

pyExecp(“类型(x)”)
## 
str(pyGet(“x”))
##“data.frame”:6个obs。共有2个变量:
##$speed:num 4 4 7 8 9
##$dist:num 2 10 4 22 16 10

为什么不直接使用R的
read.table
而不是采用这种循环方法呢?或者只是停留在Python中。这里似乎没有任何协同的理由。感谢您的评论,但我只需要将其中一个项目中的R和Python代码组合为一个完整的数据处理流程,这将需要Python和R对象之间的转换。您听说过吗?感谢Roman的建议,是的,Python和R都可以使用feather,但是,除了将其作为本地文件编写,然后读入Python之外,如何将在R中创建的feather对象传输到Python代码中呢?您好,谢谢您的建议!据我所知,我仍然需要将json文件写入本地,然后将其读入R。但我想知道是否有一种方法可以在R和Python对象之间转换,而不需要读写?因为我已经可以从R@yichi liu调用Python代码了,这取决于您的工作流程,但是您可以导入json模块,将
写入到_json
输出到Python字符串变量中,并使用
pyGet
将其传输到R。看起来OP打开了一个关于Pythonnir的错误报告。根据他的例子,我猜它在转换包含字符串的
name
列时遇到了问题。字符串不是本机的
pandas
数据类型,因此它转而使用“Python对象”来存储这些字符串。我几乎不知道
pandas
,也没有
R
,但您可以通过使用包含一列字符串值的csv重新运行代码来测试这一点。
library(PythonInR)
pyConnect() 
## R is already connected to Python!
pyIsConnected() 
## [1] TRUE
pyVersion()
## [1] "2.7.9 (default, Mar  1 2015, 13:01:26) \n[GCC 4.9.2]"
pyOptions("usePandas", TRUE) 
pyImport("pandas", as="pd") 
pySet("x", head(cars))   
pyExecp("x")
##    dist  speed
## 0     2      4
## 1    10      4
## 2     4      7
## 3    22      7
## 4    16      8
## 5    10      9
pyExecp("type(x)")
## <class 'pandas.core.frame.DataFrame'>
str(pyGet("x"))
## 'data.frame':    6 obs. of  2 variables:
##  $ speed: num  4 4 7 7 8 9
##  $ dist : num  2 10 4 22 16 10