[英]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.