当使用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值。我怎么能这样做?
更新: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:
这是您经常遇到的问题吗?
在Python中,NA的最常见值,我认为是None。不幸的是,您不能使用None替换值:
string.replace()
应该有一个更好的答案似乎是合理的:将数据帧中的指定值转换为None的“Pythonic”方式。当我有机会时,我必须检查Pandas - >数据框,然后我可以重新登录并编辑这一段(或者也许其他人会打败我)。希望上述内容可能在过渡期间对您有所帮助。