У меня возникла проблема при использовании пакета rpy2 для преобразования dataframe
, сохраненного в R в Python.Проблема с обработкой rpy2 NA/отсутствующее значение в dataframe от R до Python
import os
os.environ['R_HOME'] = '/Library/Frameworks/R.framework/Resources'
import rpy2.robjects as ro
from rpy2.robjects import pandas2ri
# define a trivial dataframe in R
ro.r('n = c(1,2)')
ro.r("b = c(NA,'def')")
ro.r("temp_df = data.frame(n,b)")
# the dataframe in R shows missing value in one cell as NA
temp_rdf = ro.r('temp_df')
print(temp_rdf)
n b
1 1 <NA>
2 2 def
# yet the transformed Python dataframe replace the missing value with a string
temp_pydf = pandas2ri.ri2py(temp_rdf)
print(temp_pydf)
n b
1 1.0 def
2 2.0 def
Я сделал некоторые поиски и нашел этот пост Rpy2 pandas2ri.ri2py() is converting NA values to integers. Это объясняет, почему, но не дает решения для этого. Я хочу иметь значения Null в Python для этих NA в R dataframe. Как я могу это сделать?
Спасибо за ответ. Есть много файлов RData, которые содержат dataframe, и я хочу загрузить и обработать их в Python. Пример только для того, чтобы показать проблему.Я ищу решение только в среде Python и не использую R для предварительной обработки данных. –
Я новичок в этом тоже. Так простите меня, если это не то, что вы ищете. Как только библиотека развращает ваши данные, если «def» представляется для двух разных строк (изначально «def» и изначально «NA»), вы теряете точность. Невозможно исправить это на Python после факта. Единственный ответ, который меня поражает, но я не могу вам помочь в его создании: используйте операции с файлами Python для обработки файлов, исправляющих значение temp. Затем используйте операции Data frame для очистки результата после Python. Я должен отдать другим людям больше опыта, чем это возможно. – TMWP
Спасибо за активное участие в этом обсуждении TMWP. Я действительно удивлен тем, как pandas2ri.ri2py обрабатывает NA в R dataframe. Естественный способ наполняет их как Null вместо некоторой ценности в своем Факторе. Мне жаль, что есть простой способ передвижения, задав некоторые магические параметры в rpy2 или написав низкоуровневую функцию rpy2. –