我有一个pandas数据框,我想通过rpy2
转换为R数据帧。大熊猫数据框的数据类型是布尔值,特别是numpy.bool_
。尝试使用KeyError
时,我得到convert_to_r_dataframe
。我正在使用熊猫0.13.1。
我正在做一些我不该做的事情?我不应该使用numpy booleans吗?
这是一个例子,
import pandas
import pandas.rpy.common as common
import numpy as np
# This works fine.
test_df_float = pandas.DataFrame(np.random.rand(10, 3), columns=list('xyz'))
r_test_df_float = common.convert_to_r_dataframe(test_df_float)
# This is a problem.
test_df_bool = pandas.DataFrame(np.random.rand(10, 3) > 0.5, columns=list('xyz'))
r_test_df_bool = common.convert_to_r_dataframe(test_df_bool)
KeyError Traceback (most recent call last)
<ipython-input-11-323084399e95> in <module>()
----> 1 r_test_df_bool = common.convert_to_r_dataframe(test_df_bool)
/usr/lib/python2.7/site-packages/pandas/rpy/common.pyc in convert_to_r_dataframe(df, strings_as_factors)
311 for item in value]
312
--> 313 value = VECTOR_TYPES[value_type](value)
314
315 if not strings_as_factors:
KeyError: <type 'numpy.bool_'>
答案 0 :(得分:1)
我认为这可能是一个错误,过去的np.bool
现在称为np.bool_
并且源文件中的两个字典缺少密钥,因此修改源(第261行) ... / site-packages / pandas / rpy / common.py )以下内容可以解决问题:
VECTOR_TYPES = {np.float64: robj.FloatVector,
np.float32: robj.FloatVector,
np.float: robj.FloatVector,
np.int: robj.IntVector,
np.int32: robj.IntVector,
np.int64: robj.IntVector,
np.object_: robj.StrVector,
np.str: robj.StrVector,
np.bool: robj.BoolVector,
np.bool_: robj.BoolVector} #new key
NA_TYPES = {np.float64: robj.NA_Real,
np.float32: robj.NA_Real,
np.float: robj.NA_Real,
np.int: robj.NA_Integer,
np.int32: robj.NA_Integer,
np.int64: robj.NA_Integer,
np.object_: robj.NA_Character,
np.str: robj.NA_Character,
np.bool: robj.NA_Logical,
np.bool_: robj.NA_Logical} #new key
基本上你只需要将最后一个键添加到两个词典中。