Python Rpy2问题,将df转换回熊猫
我已经处理了一个R数据帧:Python Rpy2问题,将df转换回熊猫,python,pandas,rpy2,Python,Pandas,Rpy2,我已经处理了一个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
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
with localconverter(ro.default_converter + pandas2ri.converter):
pd_from_r_df = ro.conversion.rpy2py(ro.r('r_df'))
pd_from_r_df
#Out:
# n s b c
#1 2.0 aa 1 -2147483648
#2 3.0 bb 0 -2147483648
#3 5.0 cc 1 -2147483648
我尝试在r\u df
的列中设置不同的数据类型,但没有成功。如何解决此问题
注意,在转换为pandas之前,将
r\u-df[is.na(r\u-df)]='None'
设置可以解决此问题。但它应该比这更简单可能的问题是,R对于布尔值(“R行话中的逻辑向量”)和整数值有一个“NA”值,而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中的一个(分别用于FALSE
、TRUE
和NA
)。rpy2转换器正在转换为整数的numpy
向量,因为:
实现允许跨两种语言匹配C数组rpy2
使用该接口()numpy
这里发生的是,您正在将R布尔向量转换为字符串向量。非常感谢,这很有趣。您将如何使用自定义转换器?你能提供更多关于你的意思的细节吗?非常感谢。文档是一个不错的起点:。然后是熊猫的rpy2转换代码。