因此,我尝试从NFLfastR获取数据,我的R等效代码是:
data <- readRDS(url('https://raw.githubusercontent.com/guga31bb/nflfastR-data/master/data/play_by_play_2019.rds'))
data
我以前也尝试过pyreadr模块,但对我不起作用。目前我正在使用rpy2模块来让它工作。下面是我正在尝试的代码:
import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri
import os
os.environ["R_HOME"] = r"C:\Program Files\R\R-3.6.3"
os.environ["PATH"] = r"C:\Program Files\R\R-3.6.3\bin\x64" + ";" + os.environ["PATH"]
pandas2ri.activate()
readRDS = robjects.r['readRDS']
df = readRDS(url('https://raw.githubusercontent.com/guga31bb/nflfastR-data/master/data/play_by_play_2019.rds'))
df = pandas2ri.ri2py(df)
发布于 2020-10-04 10:45:21
如果您只想读取nflFastR数据,您可以直接在python中读取,如下所示:
import pandas as pd
pd.read_csv('https://github.com/guga31bb/nflfastR-data/blob/master/data/' \
'play_by_play_2019.csv.gz?raw=True',
compression='gzip', low_memory=False)
但是到目前为止,还没有办法通过python做到这一点。读取本地(.rds)文件而读取url是我从未见过的事情,这已经很难了。所以你必须在本地下载这个文件,然后你可以直接使用pyreadr包或rpy2 (如果你安装了R)来阅读它。
发布于 2020-10-03 05:31:35
Rds和Rdata文件很难在R以外的其他语言中读取,因为这种格式虽然是开放的,但没有文档记录。因此,关于如何在python中读取它们,没有太多的选择。一是你的建议。另一种是使用pyreadr,但你必须首先将文件下载到磁盘,因为pyreadr不能直接从url读取:
import pyreadr
from urllib.request import urlopen
link="https://raw.githubusercontent.com/guga31bb/nflfastR-data/master/data/play_by_play_2019.rds"
response = urlopen(link)
content = response.read()
fhandle = open( 'play_by_play_2019.rds', 'wb')
fhandle.write(content)
fhandle.close()
result = pyreadr.read_r("play_by_play_2019.rds")
print(result.keys())
编辑
pyreadr 0.3.7现在包括一个下载文件的函数:
import pyreadr
url = "https://github.com/hadley/nycflights13/blob/master/data/airlines.rda?raw=true"
dst_path = "/some/path/on/disk/airlines.rda"
res = pyreadr.read_r(pyreadr.download_file(url, dst_path), dst_path)
发布于 2020-11-15 00:14:31
在R中,与Python不同的是,除非遇到名称冲突,否则不必限定每个函数及其包源。此外,在R中,没有内置的方法。您调用的每个函数都驻留在一个包中。但是R为例程方法提供了默认的包,比如utils
、base
、stats
。
具体来说,您的工作R代码调用base
包中的两个函数,如双冒号别名所示:
nfl_url <- 'https://raw.githubusercontent.com/guga31bb/nflfastR-data/master/data/play_by_play_2019.rds'
data <- base::readRDS(base::url(NFL))
data
因此,您需要在Python的rpy2
中通过显式导入base
包来运行类似的过程:
from rpy2.robjects.packages import importr
from rpy2.robjects import pandas2ri
base = importr("base")
nfl_url <- 'https://raw.githubusercontent.com/guga31bb/nflfastR-data/master/data/play_by_play_2019.rds'
r_df <- base.readRDS(base.url(nfl_url))
pandas2ri.activate()
py_df = pandas2ri.ri2py(r_df)
https://stackoverflow.com/questions/64178038
复制相似问题