Вероятная проблема заключается в том, что R имеет значение "NA" для логических значений ("логические векторы" в R lingo) и целочисленных значений, а 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
Здесь происходит то, что столбец "c" в вашем фрейме данных R имеет тип "логический" (LGLSXP
), но в C это Rмассив целочисленных значений с использованием только одного из 0, 1 и -2147483648 (для FALSE
, TRUE
и NA
соответственно).Конвертер rpy2 преобразует в вектор целых чисел numpy
, потому что:
По общему признанию, это только один из способов приблизиться к конверсии, и естьситуации, когда это не самое удобное.С помощью пользовательского конвертера вы можете получить поведение, которое вас устраивает.
PS: Еще одно замечание о вашем обходном пути ниже
Примечание, настройкаr_df [is.na (r_df)] = 'Нет' перед преобразованием в панд решает проблему.Но это должно быть проще, чем это
Здесь происходит то, что вы преобразовываете логический вектор R в вектор строк.