如何正确地将NaN从Pandas数据帧到R?

2024-10-03 09:16:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用rpy2库将数据帧从python传递到R。我试过以下方法,但失败了。在

  • 不要做任何事情——显然这是python中的NaN并导致run 时间错误。在
  • fillna('NA')-当由R解释时,它是字符而不是NA
  • 菲尔纳(robjects.NA_逻辑)-NaN将改为0,而不是 将进行插补。在
  • 菲尔纳(robjects.NA_nureal公司)-保持为NaN并导致运行 时间错误。在
  • 在使用pandas2传入方法之前将其转换为r dataframe里皮2ri()—相同的运行时错误。在
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代码来执行任务,但这是另一个讨论的主题。在

编辑:我得到的错误是

^{pr2}$

Tags: 方法fromimportas错误时间trainnan
1条回答
网友
1楼 · 发布于 2024-10-03 09:16:21

在R中,为不同的数组类型定义了不同的“NA”值。类型转换和类型层次结构使其在执行array[i] <- NA之类的操作时“正常工作”。在

以下是R中的一些NA值以及它们在rpy2中的映射方式:

import rpy2.robjects as ro
print('%12s   %12s   %20s' % ('rpy2 name', 'R', 'rpy2 type'))
for s in ('NA_Character', 'NA_Real', 'NA_Integer', 'NA_Logical'): 
    r = getattr(ro, s) 
    print('%12s   %12s   %20s' % (s, r, r.typeof if hasattr(r, 'typeof')
                                  else 'Native Python object')) 

你应该得到这样的东西:

^{pr2}$

这里使用pandas来设置NA值,因此调用fillna()得到的类型在传递给R时会很重要

关于运行时错误,您没有共享它,但我怀疑这是一个名为报告丢失值使PCA无法执行的R函数。在

最后,我从您在Windows上使用的rpy2文件路径看到了。不幸的是,在Windows上使用rpy2的范围从“不支持”到“甚至不安装”,这取决于版本。在

相关问题 更多 >