繁体   English   中英

尝试使用rpy2将pandas数据帧转换为R的数据帧时出现无符号整数错误

[英]unsigned integer error while trying to convert pandas dataframe to R's dataframe using rpy2

我有以下数据:

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)))

这可以修复还是我需要一起删除这些列,例如,如果出现此错误,只需跳过该列?

有人可以帮我解决这个问题吗?

您可以使用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)

马库斯的回答对我帮助很大。

在我的例子中,我认为这个问题的Pandas.DataFramenumpy.uint8在被pd.get_dummies()转换为虚拟变量后被转换为pd.get_dummies()

因此,在应用pandas2ri.py2ri(data)之前,我只是通过astype()将其转换为'int64' ,最后我修复了该错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM