【发布时间】:2020-01-07 06:51:07
【问题描述】:
我正在尝试使用 rpy2 库将数据帧从 python 传递到 R。我尝试了以下方法,但失败了。
- 什么都不做 - 显然它在 python 中是 NaN 并导致运行 时间错误。
- fillna('NA') - 当由 R 解释时,它是字符而不是 NA。
- fillna(robjects.NA_Logical) - NaN 将变为 0 而不是 将进行插补。
- fillna(robjects.NA_real) - 保持为 NaN 并导致运行 时间错误。
- 在使用 pandas2ri.py2ri() 传入方法之前将其转换为 r 数据帧 - 相同的运行时错误。
import pandas as pd
import rpy2.robjects as robjects
from rpy2.robjects.packages import importr
from rpy2.robjects import pandas2ri
pcaMethods = importr('pcaMethods')
pandas2ri.activate()
train_df = pd.read_csv('C:\\misc\\train.csv')
train_dfNA = train_df.fillna(robjects.NA_Real)
result = pcaMethods.pca(train_dfNA, method="svd", nPcs=2)
我希望在 python 中进行转换和任何其他操作,而 R 仅用于执行我需要的方法(很少但仍然需要)。或者,我知道我可以通过robjects.r 发送 R 代码来执行任务,但这是另一个讨论主题。
编辑:我得到的错误如下
rpy2.rinterface.RRuntimeError: Error in (function (object, method, nPcs = 2, scale = c("none", "pareto", : Invalid data format.Run checkData(data, verbose=TRUE) for details
【问题讨论】:
-
你在哪里将 Pandas 数据帧转换为 R 数据帧?你为什么要在 Pandas 数据框中填充 R NA?一个简单的转换应该将 Python 的
NaN转换为 R 的NA:r_dataframe = pandas2ri.py2ri(pandas_dataframe)。 -
我正在传入 pandas 数据框以进行缺失值插补。据我所知,当
pandas2ri.activate()时,它将在 R 中自动转换,唯一的问题是我如何让空值(NaN)成为 R 中的 NA。忘了说我实际上已经尝试使用py2ri()进行转换,但仍然面临同样的错误。 -
没有在您的代码中将 Pandas 数据帧转换为 R 数据帧的位置。
.activate()简单初始化转换器。再次,在调用pcaMethods之前转换 并且不要运行任何fillna尝试。 -
这不是我尝试过的所有代码,只是作为示例的一部分。我刚刚尝试在没有
fillna的情况下执行pandas2ri.py2ri(train_df)并导致相同的错误,因为在传递给 pcaMethods 时缺失值仍然是 NaN。 -
那么 NA 可以工作,但 NAN 不行?换句话说,如果您只使用 R(不是 Python)来读取包含
NA值的确切 csv 文件,并调用pcaMethods,是否会发生任何 R 错误?
标签: python r pandas dataframe rpy2