如何将Python Dataframe转换为R data.frame
我正在使用R软件包如何将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
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