Чтение файла рассола (PANDAS Python Data Frame) в R

Есть ли простой способ читать файлы pickle (.pkl) из Pandas Dataframe в R?

Одна из возможностей заключается в том, чтобы экспортировать в CSV и прочитать R CSV, но для меня это действительно громоздко, потому что мои данные очень большие. Есть ли более простой способ сделать это?

Благодарю!

Ответ 1

Вы можете загрузить рассол в питоне, а затем экспортировать его в R через пакет python rpy2 (или аналогичный). Как только вы это сделаете, ваши данные будут существовать в сеансе R, связанном с python. Я подозреваю, что то, что вы хотели бы сделать дальше, - это использовать этот сеанс для вызова R и saveRDS в файл или RAM-диск. Затем в RStudio вы можете снова прочитать этот файл. Посмотрите на R-пакеты rJython и rPython чтобы вы могли запускать команды python из R.

Кроме того, вы можете написать простой скрипт python для загрузки ваших данных в Python (возможно, используя один из R-пакетов, отмеченных выше) и записать форматированный поток данных в stdout. Тогда весь системный вызов сценария (включая аргумент, определяющий ваш рассол) может использоваться в качестве аргумента для fread в data.table пакета data.table В качестве альтернативы, если вы хотите придерживаться стандартных функций, вы можете использовать комбинацию system(..., intern=TRUE) и read.table.

Как обычно, есть/много/способов скинуть этот конкретный кот. Основные этапы:

  1. Загрузка данных в python
  2. Выведите данные в R (например, экспортируйте объект через rpy2 или напишите форматированный текст в stdout с R, готовым для его получения на другом конце)
  3. Сериализовать выраженные данные в R во внутреннем представлении данных (например, экспортировать объект через rpy2 или fread)
  4. (необязательно) Сделайте данные в этом сеансе R доступными для другого сеанса R (т.е. шаг закрытия цикла с помощью rpy2 или если вы используете fread то вы уже сделали).

Ответ 2

Ретикуляция была довольно легкой и супер гладкой, как было предложено russellpierce в комментариях.

install.packages('reticulate')

После этого я создал сценарий Python, как это из примеров, приведенных в их документации.

Файл Python:

import pandas as pd

def read_pickle_file(file):
    pickle_data = pd.read_pickle(file)
    return pickle_data

И тогда мой файл R выглядел так:

require("reticulate")

source_python("pickle_reader.py")
pickle_data <- read_pickle_file("C:/tsa/dataset.pickle")

Это дало мне все мои данные в R, хранящиеся ранее в формате pickle.