web-dev-qa-db-fra.com

Lecture d'un fichier pickle (PANDAS Python Data Frame) dans R

Existe-t-il un moyen facile de lire des fichiers de pickle (.pkl) de Pandas Dataframe dans R?

Une possibilité consiste à exporter au format CSV et à faire lire le fichier CSV par R, mais cela me semble vraiment lourd car mes trames de données sont plutôt volumineuses. Existe-t-il un moyen plus simple de le faire?

Merci!

20
Vincent

Vous pouvez charger le cornichon dans python puis l'exporter vers R via le python rpy2 (Ou similaire). Une fois que vous avez fait, vos données existeront dans une session R liée à python. Je soupçonne que ce que vous voudriez faire ensuite serait d'utiliser cette session pour appeler R et saveRDS dans un fichier ou RAM = disk. Ensuite, dans RStudio, vous pouvez relire ce fichier. Consultez les packages R rJython et rPython pour savoir comment déclencher le python commandes de R.

Alternativement, vous pouvez écrire un simple script python pour charger vos données dans Python (probablement en utilisant l'un des packages R mentionnés ci-dessus)) et écrire un flux de données formaté à stdout. Ensuite, cet appel système complet au script (y compris l'argument qui spécifie votre cornichon) peut être utilisé comme argument pour fread dans le package R data.table. Alternativement, si vous le souhaitez garder les fonctions standard, vous pouvez utiliser la combinaison de system(..., intern=TRUE) et read.table.

Comme d'habitude, il existe/plusieurs/façons de dépouiller ce chat en particulier. Les étapes de base sont les suivantes:

  1. Charger les données en python
  2. Exprimer les données vers R (par exemple, exporter l'objet via rpy2 ou écrire du texte formaté sur stdout avec R prêt à le recevoir à l'autre extrémité)
  3. Sérialiser les données exprimées dans R vers une représentation de données interne (par exemple, exporter l'objet via rpy2 ou fread)
  4. (facultatif) Rendez les données de cette session de R accessibles à une autre session R (c'est-à-dire l'étape pour fermer la boucle avec rpy2, ou si vous avez utilisé fread alors vous avez déjà terminé).
6
russellpierce

réticulé était assez facile et super fluide comme suggéré par russellpierce dans les commentaires.

install.packages('reticulate')

Après quoi j'ai créé un script Python comme celui-ci à partir d'exemples donnés dans leur documentation.

Fichier Python:

import pandas as pd

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

Et puis mon fichier R ressemblait à:

require("reticulate")

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

Cela m'a donné toutes mes données dans R stockées précédemment au format pickle.

14
Ankur Sinha