【问题标题】:Python Pandas to R dataframePython Pandas 到 R 数据框
【发布时间】:2014-07-28 11:17:15
【问题描述】:

我打算将 Python pandas 数据框转换为 R 中的数据框。 我找到了几个解决这个问题的库

http://pandas.pydata.org/pandas-docs/stable/r_interface.html

这是rpy2

但我找不到保存或转移到 R 的方法。

首先我尝试了“to_csv”

df_R = com.convert_to_r_dataframe(df_total)
df_R.to_csv(direc+"/qap/detail_summary_R/"+"distance_"+str(gp_num)+".csv",sep = ",")

但它给了我一个错误

"AttributeError: 'DataFrame' object has no attribute 'to_csv'  "

所以我尝试查看它的数据类型 是

<class 'rpy2.robjects.vectors.DataFrame'>

如何将此类型对象保存到 csv 文件或传输到 R?

【问题讨论】:

    标签: python r pandas rpy2


    【解决方案1】:

    如果标准的基于文本的格式 (csv) 太慢或太笨重,我推荐feather,这是一种基于Apache Arrow 的序列化格式。它是由 RStudio/ggplot2/etc (Hadley Wickham) 和 pandas (Wes McKinney) 的创建者明确开发的,旨在提高 Python 和 R 之间的性能和互操作性(请参阅 here)。

    您需要 pandas 版本 0.20.0+、pip install feather-format,然后您可以使用 to_feather/read_feather 操作作为 to_csv/read_csv 的直接替换:

    df_R.to_feather('filename.feather')
    df_R = pd.read_feather('filename.feather')
    

    R 等效项(使用包 feather)是

    df <- feather::read_feather('filename.feather')
    feather::write_feather(df, 'filename.feather')
    

    除了一些小的调整(例如,您不能在羽毛中保存自定义 DataFrame 索引,因此您需要先调用df.reset_index()),这是csv、@987654335 的快速简便的直接替代品@等

    【讨论】:

    • 截至 2020 年 3 月,feather / pyarrow 不支持包装稀疏矩阵的数据帧。
    【解决方案2】:

    最近的文档https://rpy2.github.io/doc/v3.2.x/html/generated_rst/pandas.html 有一个关于与pandas 交互的部分。

    否则rpy2.robjects.vectors.DataFrame 类型的对象有一个方法to_csvfile,而不是to_csv

    https://rpy2.github.io/doc/v3.2.x/html/vector.html#rpy2.robjects.vectors.DataFrame.to_csvfile

    如果想在 Python 和 R 之间传递数据,有比写入和读取 CSV 文件更有效的方法。试试转换系统:

    from rpy2.robjects import pandas2ri
    pandas2ri.activate()
    
    from rpy2.robjects.packages import importr
    
    base = importr('base')
    # call an R function on a Pandas DataFrame
    base.summary(my_pandas_dataframe)
    

    【讨论】:

      【解决方案3】:

      获得 data.frame 后,您可以使用 write.table 或后者的包装器之一保存它,例如 writee.csv

      在 rpy2 中:

      import rpy2.robjects as robjects
      ## get a reference to the R function 
      write_csv = robjects.r('write.csv')
      ## save 
      write_csv(df_R,'filename.csv')
      

      【讨论】:

        猜你喜欢
        • 2017-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-12
        • 2016-04-07
        • 1970-01-01
        相关资源
        最近更新 更多