gpt4 book ai didi

python - Rpy2 将 df 转换回 pandas 时出现问题

转载 作者:行者123 更新时间:2023-12-01 00:59:01 25 4
gpt4 key购买 nike

我有一个已处理的 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 替换为整数。

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_df的列中设置不同的数据类型,但没有成功。我该如何解决这个问题?

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

最佳答案

可能的问题是,R 对于 bool 值(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(分别表示 FALSETRUENA)。 rpy2 转换器正在转换为整数的 numpy 向量,因为:

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

PS:关于下面的解决方法的更多说明

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 bool 向量转换为字符串向量。

关于python - Rpy2 将 df 转换回 pandas 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55967536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com