【问题标题】:Python Dataframe conversion to R dataframe with null valuesPython数据框转换为具有空值的R数据框
【发布时间】:2020-08-03 03:05:31
【问题描述】:

我正在使用 rpy2 包将空 python 数据帧转换为 r 数据帧,它工作得非常好,除了我的列中有空值导致转换期间出错

patients_list_df = load_df_state('temp_data/patients_list_df.csv')
with localconverter(ro.default_converter + pandas2ri.converter):
    patients_list_df = ro.conversion.py2rpy(patients_list_df)

/Users/dev/venv/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:63: 用户警告:尝试转换列时出错 “term_dt_datetime”。回退到字符串转换。错误是: 系列只能是一种类型,或无(这里我们有 )。 % (name, str(e))) 属性错误: 'float' 对象没有属性 'encode'

我有 5 个数据帧,其中一些空值在 python pandas 中表示为 NaN 一些表示为 NaT 但我不知道如何在 R 代码中解决这个问题。稍后将根据其各自的数据类型处理这些列。

版本:

熊猫==1.0.1

rpy2~=3.3.5

【问题讨论】:

  • 您使用的 rpy2 版本可能很重要。 pandas 对 NA 的处理方式最近发生了变化。
  • 随版本更新

标签: python r rpy2


【解决方案1】:

rpy2 很快就会回避猜测 pandas DataFrame 中的列 (Series) 的类型可能是什么。这里可能发生的情况是您有一个numpy.dtype('O') 类型的列,即该列/numpy 1D-array 中的每个项目都可以是任何类型的 Python 对象。

rpy2 的默认值是检查数组中的类型是否是同质的:对于数组中的所有项,只有一种类型,或者None/NaN/pandas.isna() 返回True。代码在这里:https://github.com/rpy2/rpy2/blob/v3.3.x/rpy2/robjects/pandas2ri.py#L170

所以理论上应该没有问题。如果您能够提供一个最小的独立示例来重现它,就会更容易看到它发生了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 2020-06-17
    • 2013-12-05
    相关资源
    最近更新 更多