繁体   English   中英

Rpy2将包含空值的分类数据转换为R因数

[英]Rpy2 conversion of categorical data containing nulls to R factors

我有一个带有包含NaN值的分类列的熊猫数据框,例如:

g = pd.Series(["A", "B", "C", np.nan], dtype="category")
g

0      A
1      B
2      C
3    NaN
dtype: category
Categories (3, object): [A, B, C]

在熊猫中,NaN不是类别,但是您可以在分类数据中包含NaN值。 我想在Jupyter笔记本中使用%% R将此数据帧传递给R。 R成功地将分类列识别为一个因子,但是该因子的格式不正确,大概是因为Nan值:

%%R -i g
str(g)
Factor w/ 3 levels "A","B","C": 1 2 3 0
 - attr(*, "names")= chr [1:4] "0" "1" "2" "3" 

print(g)
Error in as.character.factor(x) : malformed factor

是否有任何方法可以确保该因子没有格式错误-例如自动创建NA因子水平?

R:3.5.1,rpy2:2.9.4,Python-3

在撰写本文时,这是rpy2转换熊猫类别的错误,该错误已修复,并且将从2.9.5版本开始包含在rpy2中: https ://bitbucket.org/rpy2/rpy2/issues/493/rpy2- 转换-的-分类数据

解决方法相当简单:不要在熊猫类别中使用NaN

g = pd.Series(["A", "B", "C", np.nan], dtype="category")
# Prepare alternative representation to pass it to R
g_r = g.replace(np.nan, 'Missing')

现在转换时看起来像:

%%R -i g_r
str(g_r)

Factor w/ 4 levels "A","B","C","Missing": 1 2 3 4
- attr(*, "names")= chr [1:4] "0" "1" "2" "3"

转换回R NA只是降低添加级别的问题:

%%R -i g_r
str(droplevels(g_r, exclude = "Missing")) 

Factor w/ 3 levels "A","B","C": 1 2 3 NA
- attr(*, "names")= chr [1:4] "0" "1" "2" "3"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM