Rpy2 преобразование категориальных данных, содержащих нули, в R-факторы - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть кадр данных pandas с категориальным столбцом, содержащим значения NaN, например ::10000

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 в ваших категориальных данных. Я хочу передать этот фрейм данных в R, используя %% R в блокноте Jupyter. Категориальный столбец успешно распознается 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

1 Ответ

0 голосов
/ 18 ноября 2018

На момент написания статьи это ошибка преобразования rpy2 категорий панд, которая исправлена ​​и будет включена в rpy2 начиная с версии 2.9.5: https://bitbucket.org/rpy2/rpy2/issues/493/rpy2-conversion-of-categorical-data

Обходной путь довольно тривиален:не используйте 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...