将df转换回Pandas的Rpy2问题

2024-09-28 23:18:21 发布

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

我已经处理了一个R数据帧:

import rpy2.robjects as ro
from rpy2.robjects.packages import importr
from rpy2.robjects import pandas2ri

from rpy2.robjects.conversion import localconverter
pandas2ri.activate()
import pandas as pd

%%R
n = c(2, 3, 5) 
s = c("aa", "bb", "cc")
b = c(TRUE, FALSE, TRUE) 
r_df = data.frame(n, s, b)
r_df[['c']]=NA

r_df

#out:
#  n  s b  c
#1 2 aa 1 NA
#2 3 bb 0 NA
#3 5 cc 1 NA

当我将其转换为pandas时,它将NA替换为整数。在

^{pr2}$

我试图在r_df的列中设置不同的数据类型,但没有成功。我如何解决这个问题?在

注意,在转换为pandas之前设置r_df[is.na(r_df)]='None'可以解决这个问题。但应该比这简单


Tags: 数据fromimporttruepandasdfroas
1条回答
网友
1楼 · 发布于 2024-09-28 23:18:21

可能的问题是R对于布尔值和整数值有一个“NA”值(在R术语中是“逻辑向量”),而Python/numpy没有。在

看看dtype在以下两个示例之间是如何变化的:

In [1]: import pandas                     

In [2]: pandas.Series([True, False, True])
Out[2]: 
0     True
1    False
2     True
dtype: bool

In [3]: pandas.Series([True, False, None])
Out[3]: 
0     True
1    False
2     None
dtype: object

这里发生的是,R数据帧中的列“c”是“逻辑”类型(LGLSXP),但在c中,这是一个整数值的R数组,只使用0、1和-2147483648中的一个(分别用于FALSETRUE和{})。rpy2转换器正在转换为numpy整数向量,因为:

  • rpy2实现{a1},以允许跨两种语言匹配C数组。在
  • numpy使用该接口(^{} is called by ^{}

诚然,这只是处理转换的方法之一,而且在某些情况下这不是最方便的。使用自定义转换器可以获得更适合您的行为。在

请注意:下面还有一个关于您的解决方法的说明

Note, setting r_df[is.na(r_df)]='None' prior to converting to pandas solves the issue. But it should be simpler than this

这里发生的是,你把R布尔向量转换成字符串向量。在

相关问题 更多 >