2014-06-25 68 views
3

我有一個熊貓數據幀,我想通過rpy2轉換爲R數據幀使用。熊貓數據幀的數據類型是布爾值,具體爲numpy.bool_。嘗試使用convert_to_r_dataframe時,我收到KeyError。我正在使用熊貓0.13.1。熊貓convert_to_r_dataframe不適用於numpy.bool_

我正在做一些我不應該做的事情?我不應該使用塊狀布爾值?

下面是一個例子,

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

回答

1

我覺得這可能是一個錯誤,是什麼曾經是np.bool現在被稱爲np.bool_,關鍵是缺少了兩個字典在源文件中,因此修改源(線261 ... /站點包/熊貓/ 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 

基本上你只需要最後一個鍵添加到兩個dictionarys 。

+0

非常好。非常感謝。這解決了它。 – mjandrews