rpy2处理从R到Python的数据帧中的NA /缺失值的问题

时间:2017-02-14 16:33:05

标签: r python-2.7 rpy2

使用rpy2包将R中保存的dataframe转换为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。它解释了为什么,但没有提供解决方案。我想在Python中为N数据帧中的NA设置Null值。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

更新: http://rpy.sourceforge.net/rpy2/doc-2.2/html/rinterface.html

以上链接可能对某些设置有用。如果你找到“NA”(包括空格“并进入第二击。有一个看起来与你的NA问题有关。

原帖: 假设输出中显示的“def”以字符串形式出现,您可以将其替换为您确信不是数据中的值的字符串,然后使用它来代替未进入的NA值:

此示例代码说明了这一概念。

x = "def"
type(x)
x = x.replace("def", "NA")
x

查看您的源有两行的问题,这两行都说'def'表示数据来自数据,另一行表示NA转换为def:

  1. 将'def'转换为R
  2. 中的其他内容
  3. 引入您的数据
  4. 现在'def'表示NA
  5. 使用它或将其转换为您可以使用的内容
  6. 这是您经常遇到的问题吗?

    1. 如果是这样,请创建一个测试功能,以检查您的数据是否为'def'

    2. 如果找到替换为疯狂的东西,你知道数据不会像:my_crazy_replacementValue

    3. 将“def”替换为所需的NA替换

    4. 用“def”替换my_crazy_replacementValue

    5. 在Python中,我认为NA最常见的值是None。 不幸的是,您无法使用以下方法将值替换为:

      string.replace()
      

      应该有一个更好的答案似乎是合理的:将数据帧中的指定值转换为None的“Pythonic”方式。我要审查熊猫 - &gt;数据帧,当我有机会,然后我可以重新登录并编辑这一段(或者也许其他人会打败我)。希望以上内容可以帮助你过渡。