从 Python 读取 R 数据集。
rdata 包提供了一种轻量级方法,可以将以“.rda”和“.rds”格式存储的 R 数据集/对象导入到 Python 中。其主要优点是:
它是纯Python实现,不依赖于R语言或相关库。因此,它可以在支持 Python 的任何地方使用,包括使用 Pyodide 的 Web。
它尝试支持所有可以有意义翻译的 R 对象。与其他解决方案相反,您不限于导入数据框或具有特定结构的数据。
它允许用户轻松自定义 R 类到 Python 类的转换。您的数据是否使用自定义 R 类?不用再担心,因为可以定义到您选择的 Python 类的自定义转换。
它有一个宽松的许可证(MIT)。与依赖 R 库并因此需要遵守 GPL 许可证的其他包相反,您可以使用 rdata 作为 MIT、BSD 甚至闭源项目的依赖项。
rdata 在 PyPi 上,可以使用pip
安装:
pip 安装 rdata
它也可用于conda
使用conda-forge
通道:
conda install -c conda-forge rdata
开发分支的当前版本可以安装为
pip install git+https://github.com/vnmabus/rdata.git@develop
rdata 的文档位于 ReadTheDocs 中。
ReadTheDocs 中提供了使用示例。
读取 R 数据集的常见方法如下:
导入 rdataconverted = rdata.read_rda(rdata.TESTDATA_PATH / "test_vector.rda")converted
这导致
{'test_vector': array([1., 2., 3.])}
在底层,这相当于以下代码:
导入 rdataparsed = rdata.parser.parse_file(rdata.TESTDATA_PATH / "test_vector.rda")converted = rdata.conversion.convert(parsed)converted
这包括两个步骤:
首先,使用函数 rdata.parser.parse_file 解析文件。这提供了文件内容的文字描述,作为表示基本 R 对象的 Python 对象的层次结构。这一步是明确的并且始终是相同的。
然后,每个对象必须转换为适当的 Python 对象。在此步骤中,有多种选择,确定哪种 Python 类型最适合作为给定 R 对象的转换。因此,我们提供了一个默认的 rdata.conversion.convert 例程,它尝试选择保留原始 R 对象大部分信息的 Python 对象。对于自定义 R 类,还可以指定 Python 对象的转换例程。
基本convert例程仅构造一个SimpleConverter对象并调用其convert方法。 Convert 的所有参数都直接传递给 SimpleConverter 初始化方法。
尽管不是微不足道,但可以创建自定义 Converter 对象来更改基本 R 对象转换为 Python 对象的方式。然而,一种更常见的情况是,不想改变基本 R 对象的转换方式,而是想为特定的 R 类提供转换。这可以通过将字典传递给 SimpleConverter 初始化方法来完成,其中包含 R 类的名称作为键,以及将该类的 R 对象转换为 Python 对象的可调用函数作为值。默认使用的字典是DEFAULT_CLASS_MAP,可以转换data.frame、factor等常用的R类。
作为示例,以下是我们如何实现将因子类转换为字节对象的例程,而不是默认转换为 Pandas 分类对象:
import rdatadef Factor_constructor(obj, attrs): value = [bytes(attrs['levels'][i - 1], 'utf8') if i >= 0 else None for i in obj] return valuenew_dict = { **rdata. conversion.DEFAULT_CLASS_MAP,“因子”:factor_constructor}转换= rdata.read_rda(rdata.TESTDATA_PATH / “test_dataframe.rda”,constructor_dict = new_dict, ) 转换
其结果如下:
{'test_dataframe':类值 1 b'a' 1 2 b'b' 2 3 b'b' 3}
说明该包功能的其他示例可以在 ReadTheDocs 文档中找到。