如何用rpy2检查转换为R对象的Pandas DataFrame列的数据类型
检查rpy2转换后的R DataFrame列数据类型
问题背景
我创建了一个Pandas DataFrame,并使用rpy2将其转换为R对象,现在想要检查该R对象中某一列的数据类型。以下是我的代码:
import pandas as pd import rpy2.robjects as ro from rpy2.robjects.packages import importr from rpy2.robjects import pandas2ri utils = importr('utils') base = importr('base') pd_df = pd.DataFrame({'col_1': [1,2,3], 'col_2': [4,5,6]}) with (ro.default_converter + pandas2ri.converter).context(): r_df = ro.conversion.get_conversion().py2rpy(pd_df)
在R中通常用str(r_df$col_1)实现,但我尝试了以下方法均未奏效:
r_df$col_1 r_df['col_1'] r_df[1,1] robjects.r['r_df'] robjects.r('''r_df''')
可行解决方案
方法1:使用rpy2的base.str和rx2访问列
rpy2中访问R DataFrame的列需要用rx2()方法(对应R中的$操作符),结合R的str()函数直接调用:
# 调用base包的str函数查看列的详细结构 base.str(r_df.rx2('col_1'))
方法2:将Python中的R对象传入R环境后执行R代码
先把Python里的r_df对象放到R的全局环境中,再执行R原生的str()命令:
# 将r_df传入R全局环境 ro.globalenv['r_df'] = r_df # 执行R代码查看列类型 ro.r('str(r_df$col_1)')
方法3:查看列的基础数据类型
如果只需要获取数据类型而非详细结构,可以用R的class()函数:
# 打印列的数据类型 print(base.class_(r_df.rx2('col_1')))
为什么之前的方法无效?
r_df$col_1:Python不支持$作为属性访问符,rpy2的R对象需用rx2()替代R中的$r_df['col_1']:rpy2的R DataFrame不支持Python式字典索引,需用rx()或rx2()r_df[1,1]:rpy2中R DataFrame的索引语法为r_df.rx(行, 列),该写法仅能取单个元素,无法获取整列robjects.r['r_df']/robjects.r('''r_df'''):这两种方式访问的是R环境中的对象,但Python里的r_df默认未传入R环境,因此无法找到
内容的提问来源于stack exchange,提问作者user1700890
相关产品推荐
相关产品推荐

