【问题标题】:rpy2 conversion to pandas DataFrame returns numpy recarray instead of pandasrpy2 转换为 pandas DataFrame 返回 numpy recarray 而不是 pandas
【发布时间】:2020-06-22 06:22:16
【问题描述】:

我正在尝试使用 rpy2 将 R 数据帧转换为 python

with localconverter(ro.default_converter + pandas2ri.converter):
                smogned = ro.conversion.rpy2py(smogned)
print('after pandas2ri')            
print(type(smogned))
print(smogned.shape)
print(smogned.dtype)

这给了我以下内容

after pandas2ri
<class 'numpy.recarray'>
(7412,)
(numpy.record, [('WS', '<f8'), ('WS_1', '<f8'), ('WS_2', '<f8'), ('WS_3', '<f8'), ('WS_4', '<f8'), ('WS_5', '<f8'), ('RH', '<f8'), ('RH_1', '<f8'), ('RH_2', '<f8'), ('RH_3', '<f8'), ('RH_4', '<f8'), ('RH_5', '<f8'), ('TA', '<f8'), ('TA_1', '<f8'), ('TA_2', '<f8'), ('TA_3', '<f8'), ('TA_4', '<f8'), ('TA_5', '<f8'), ('gridMET_ETr', '<f8'), ('Site_Id_1', '<f8'), ('Site_Id_2', '<f8'), ('Site_Id_3', '<f8'), ('Site_Id_4', '<f8'), ('Site_Id_5', '<f8'), ('Site_Id_6', '<f8'), ('Vegetation_1', '<f8'), ('Vegetation_2', '<f8'), ('Vegetation_3', '<f8'), ('Month_1', '<f8'), ('Month_2', '<f8'), ('Month_3', '<f8'), ('Month_4', '<f8'), ('LE_bowen_corr_mm_', '<f8')])

还需要注意的是,我的数据有 33 列,而返回的数据是 (7412,)。我应该怎么做才能使它成为熊猫数据框?我也希望它可以直接将数据帧作为熊猫返回,因为我不想最终将recarray转换为numpy数组并将numpy数组转换为pandas,因为当你这样做时

pd.DataFrame(data=yourdata, columns=[...]) 

您必须按照我返回 smogned 数据框列的相同顺序指定列,我目前无法控制

信息

  • numpy 版本 1.16.4
  • 熊猫版本 0.20.3
  • rpy2 版本 3.2.6

【问题讨论】:

  • smogned.dtype 是什么? DataFrame(smogned) 有效吗?
  • @hpaulj 非常感谢,将其明确转换为 pandas.DataFrame 使其工作!我在回答中提到了您,并通过添加smogned.dtype 的输出更新了我的问题

标签: python pandas numpy rpy2


【解决方案1】:

感谢@hpaulj,我通过将“recarray”显式转换为 pandas DataFrame 来解决此问题:

smogned = pd.DataFrame(smogned)

虽然它对我来说仍然很奇怪,但为什么它返回 recarray

【讨论】:

    猜你喜欢
    • 2020-12-15
    • 1970-01-01
    • 2018-11-18
    • 2019-08-04
    • 2020-02-10
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 2021-08-22
    相关资源
    最近更新 更多