如何在rpy2中将数据框的数据类型赋值给变量?
在rpy2中获取DataFrame数据类型并赋值变量的方法
你遇到的RParsingError是因为直接在rpy2中写R风格的赋值语句不符合rpy2的代码执行规范,同时str(df)在R中主要用于打印数据结构,并不会返回类似Pythondf.dtypes的类型结果。下面是两种正确的实现方式:
方式1:调用R原生函数获取列类型
对应Python中df.dtypes的需求,在R里可以用sapply(df, class)或sapply(df, typeof)获取每列的数据类型,在rpy2中这样实现:
from rpy2.robjects import r, pandas2ri # 若你的df是Pandas DataFrame,先转换为R的DataFrame pandas2ri.activate() r_df = pandas2ri.py2rpy(df) # 获取每列类型并赋值给dt dt = r['sapply'](r_df, r['class']) # 或用typeof获取更底层的类型:dt = r['sapply'](r_df, r['typeof']) # 打印结果 print(dt)
方式2:通过rpy2执行R代码块
如果你习惯写R代码,可以用rpy2的R()对象执行完整R代码片段:
from rpy2.robjects import R, pandas2ri pandas2ri.activate() r_df = pandas2ri.py2rpy(df) # 将R DataFrame传入R环境 r = R() r.assign("df", r_df) # 执行R代码获取类型 r('dt <- sapply(df, class)') # 从R环境取出变量dt dt = r['dt'] print(dt)
错误原因说明
你之前写的dt <- str(df)会报错,一是因为在rpy2中直接传入这类赋值语句需要用R()对象执行,二是str(df)在R中仅用于打印数据结构信息,返回值为NULL,无法得到你需要的每列类型数据。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

