Как читать .rds R файлы с пространственными данными в python - PullRequest
2 голосов
/ 10 июля 2019

Я использовал R для сохранения набора данных в формате .rds. Проблема в том, что мне нужно прочитать этот .rds файл с использованием Python без локальной установки R. Этот .rds файл содержит объект класса sf data.framte. Образец .rds можно найти здесь .

Мне удалось использовать rpy2, чтобы открыть его. Тем не менее, эта библиотека использует R, чтобы открыть файл. Поскольку я создаю приложение на Python, мне не нужна зависимость от R.

Ниже вы можете найти рабочее решение, используя rpy2.

import geopandas as gpd
import pandas as pd
import rpy2.robjects as robjects
from rpy2.robjects import numpy2ri
numpy2ri.activate()

from shapely.geometry import LineString

def rds_to_pandas(path='temp.rds'):

    readRDS = robjects.r['readRDS']
    df = readRDS('temp.rds')

    return df

def from_rvector_to_rlist(vector):

    return [list(v) for v in vector]

def from_rlist_to_coorlist(rlist):

    coorlist = []
    for r in rlist:
        bound = int(len(r)/2)
        coorlist.append(list(zip(r[:bound], r[bound:])))

    return coorlist[0]

# Open as GeoPandas
df = pd.DataFrame(rds_to_pandas())
df['geometry'] = df['geometry'].apply(from_rvector_to_rlist)
df['geometry'] = df['geometry'].apply(from_rlist_to_coorlist)
df['geometry'] = df['geometry'].apply(LineString)

Когда я пытаюсь pyreadr, я продолжаю получать ту же ошибку:

"ValueError: Unable to read from file"

Кто-нибудь знает, как открыть этот файл .rds, используя pyreadr или другой метод, который не зависит от R?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...