python - 使用 Python 导入 R 脚本的输出
问题描述
我在这个 stackoverflow 中的第一篇文章!:)
我正在尝试使用 Python 导入表(R 脚本的输出)。这对于避免翻译在 R 中设计复杂 data.table 的巨大脚本非常有帮助。
现在我知道如何使用以下代码使用 Python 调用 R 脚本:
import os
import subprocess
#Launch selected script
command = 'C:/Program Files/R/R-3.4.0/bin/x64/Rscript.exe'
path2script = 'C:/mypath/myscript.R'
cmd = [command, path2script]
a = subprocess.call(cmd)
但是后来我不知道如何使用我的 Python 脚本来使用表格、R 代码的输出。你有什么想法吗?
非常感谢
编辑:
我尝试了下面@punter 的解决方案
import subprocess
with subprocess.Popen(['/command/to/run', '/other/parameters'], stdout=subprocess.PIPE) as proc:
table = proc.stdout.read()
但是表格是这样一种奇怪的格式:(它是一个子集)
A\r\n COL1 COL2 COL3\r\n 1: 2015-06-17 05:19 NA <NA>\r\n 2: 2015-06-17 05:19 NA <NA>\r\n 3: 2015-06-17 05:19 NA <NA>\r\n 4: 2015-06-17 05:19 NA <NA>\r\n 5: 2015-06-17 05:19:29 NA <NA>\r\n
当我尝试下面的代码时,我得到了列名中的所有内容
s=str(table)
data = StringIO(s)
df=pd.read_csv(data)
[0 行 x 111 列]
编辑编号 2
在 str(table, "ISO-8859-1") 之类的 str 中尝试使用这个“ISO-8859-1”似乎正在工作,我可以注意到我的脚本中有多个表。我正在以一种干净的方式重新运行所有内容,我希望它会起作用!:)
解决方案
考虑调整 R 脚本以用作没有write.csv()
文件名的最后一行以将数据转储到控制台。这将允许引用字符串值。然后在 Python 中,用于接收带有字节处理的输出,以便迁移到 Pandas 数据帧中。subprocess.Popen
R
...
write.csv(my_r_df, file="", row.names=FALSE)
Python
import subprocess
from io import StringIO
import pandas as pd
# RUN R SCRIPT
command = r'C:\Path\To\Rscript.exe'
path2script = r'C:\Path\To\R\Code.R'
a = subprocess.Popen([command, path2script],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
output, error = a.communicate()
# IMPORT PANDAS DATA FRAME
my_pandas_df = pd.read_csv(StringIO(output.decode('utf-8')))
my_pandas_df
当然,您也可以让 R 简单地将数据写入 .csv,然后导入 Pandas。
推荐阅读
- html - 想要使用 css 和 html 在打印页面中添加页码
- oracle - 将记录插入集合类型 Oracle
- c++ - 冲突声明 std::lock_guard
- javascript - 单击按钮时的新选项卡/删除按钮上的选项卡/单击按钮时将项目添加到选项卡
- vba - 需要在PPT中从Excel中传输所有图表
- javascript - Angular中的单例服务与异步HTTP调用?
- java - 尝试执行 abox SWRL API 命令时出错
- javascript - 如何在我的网站上获取 Instagram 视频?
- python - 使用 ThreadPoolExecutor python 的内存泄漏
- reinforcement-learning - 用于入侵检测的 MARL