我有以下数据:
grp_m1 grp_m2 grp_m3 grp_m4
$50-$75 $50-$75 $50-$75 $50-$75
$50-$75 $50-$75 $50-$75 $50-$75
$150-$175 $150-$175 $150-$175 $150-$175
$100-$125 $100-$125 $100-$125 $100-$125
$150-$175 $125-$150 $125-$150 $125-$150
然后将它们转换为假人。这些虚拟对象的dtype在pandas
数据帧中是unsigned int,当我尝试使用以下代码将其转换为R数据帧时:
from rpy2.robjects import pandas2ri
pandas2ri.activate()
pandas2ri.py2ri(data)
我收到以下错误:
Error while trying to convert the column "grp_m4_$175-$200". Fall back to string conversion. The error is: Cannot convert numpy array of unsigned values -- R does not have unsigned integers.
(name, str(e)))
C:\Users\hduser\AppData\Local\Continuum\anaconda3.1\lib\site-packages\rpy2-2.9.1-py3.6-win-amd64.egg\rpy2\robjects\pandas2ri.py:61: UserWarning: Error while trying to convert the column "grp_m4_$200-$225". Fall back to string conversion. The error is: Cannot convert numpy array of unsigned values -- R does not have unsigned integers.
(name, str(e)))
这可以修复,还是我需要将这些列全部删除,例如如果出现此错误,请跳过列?
有人可以帮帮我吗?
答案 0 :(得分:3)
您可以使用astype()
中的pandas
将pandas
数据框中的所有元素转换为所需的dtype
。在这种情况下,我们只想将您的虚拟变量转换为R理解的内容。假设您的数据帧仍然命名为" data",请尝试以下代码:
import pandas as pd
# change unsigned integers to integers
n_data = data.astype('int64') # you could also try float64, if you want
# Check data type
type(n_data.iat[0,0])
# Output
# <class 'numpy.int64'>
from rpy2.robjects import pandas2ri
pandas2ri.activate()
pandas2ri.py2ri(data)
答案 1 :(得分:1)
马库斯的回答对我很有帮助。
在我的情况下,我认为导致此问题的主要原因是 Pandas.DataFrame
项在转换后转换为 numpy.uint8
通过 pd.get_dummies()
来虚拟变量。
因此,我只是在应用'int64'
之前通过astype()
将其转换为pandas2ri.py2ri(data)
,最后修复了该错误。