【问题标题】:pandas convert_to_r_dataframe does not work with numpy.bool_pandas convert_to_r_dataframe 不适用于 numpy.bool_
【发布时间】:2014-08-16 02:37:27
【问题描述】:

我有一个 pandas 数据框,我想将其转换为 R 数据框,以便通过 rpy2 使用。 pandas 数据框的数据类型为布尔型,具体为numpy.bool_。我在尝试使用convert_to_r_dataframe 时得到KeyError。我正在使用熊猫 0.13.1。

我正在做我不应该做的事情?我不应该使用 numpy 布尔值吗?

这是一个例子,

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_'>

【问题讨论】:

    标签: python r pandas rpy2


    【解决方案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
    

    基本上,您只需将最后一个键添加到两个字典中。

    【讨论】:

      猜你喜欢
      • 2015-04-07
      • 2019-07-07
      • 2022-01-02
      • 2019-06-25
      • 2020-07-13
      • 2013-05-19
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多