Passer des dataframes contenant True / False de Python à R au format csv (pd.DataFrame-> tbl_df)

Ce n'est pas un gros problème, mais j'étais accro à la sauvegarde de pandas.DataFrame au format csv et à le lire avec le reader :: tbl_df de R, alors notez la solution de contournement.

Lorsqu'il s'agit de trames de données de petite et moyenne taille, je pense qu'il est courant d'utiliser des pandas pour Python et data.frame pour R.

De plus, le passage de trames de données entre Python <=> R peut servir de médiateur SQL, mais je pense que csv est meilleur si vous le faites facilement.

Problèmes de livraison par csv

Cependant, si pandas.DataFrame avec booléen est envoyé en csv tel quel, il semble qu'il ne puisse pas être lu comme logique avec read \ _csv. Comme ça ↓

from datetime import datetime
import pandas as pd

df = pd.DataFrame({
    'A': ('a1', 'a2', 'a3'),
    'B': (True, False, True),
    'C': (0, 1, 2),
    'D': [datetime.now()] * 3
})

df.to_csv('sample.csv', index=False, encoding='utf-8')
library(readr)

read_csv('sample.csv', col_types = 'cliT', locale = locale(encoding = 'UTF-8'))

スクリーンショット 2017-04-23 11.39.05.png

En regardant l'erreur, il semble que seuls T / F, TRUE / FALSE et 0/1 sont acceptés comme logiques.

solution de contournement

# df.to_csv('sample.csv', index=False, encoding='utf-8')
(df * 1).to_csv('sample.csv', index=False, encoding='utf-8')

Tu peux le faire. Il définit True / False sur 1/0. \ * Pour une chaîne de caractères est un processus qui change "" hoge "\ * 2" en "" hogehoge "", donc même si vous "\ * 1" comme cette fois, rien ne changera.

スクリーンショット 2017-04-23 11.44.25.png

S'il est 01, il peut être lu avec read \ _csv.

スクリーンショット 2017-04-23 11.53.09.png

Exemple d'échec

À propos, la méthode suivante échoue.

df.astype(int)  #Échec s'il y a str etc.
df.replace({True: 1, False: 0})  #Il ne se passe rien
df.replace({True: "TRUE", False: "FALSE"})  # 1/0 est tout dans la chaîne de caractères(Figure ci-dessous)

スクリーンショット 2017-04-23 11.50.58.png

(S'il vous plaît dites-moi s'il existe un autre bon moyen)

Recommended Posts

Passer des dataframes contenant True / False de Python à R au format csv (pd.DataFrame-> tbl_df)
Comment lire un csv contenant uniquement des entiers en Python
[R] [Python] Memo pour lire plusieurs fichiers csv dans plusieurs fichiers zip
Convertir un document XML stocké dans une base de données XML (BaseX) au format CSV (en utilisant Python)
Comment faire R chartr () en Python
Python> Numéros de sortie de 1 à 100, 501 à 600> Pour csv
Convertir de Markdown en HTML en Python
[Python] Conversion de DICOM en PNG ou CSV
Du dessin de fichier au graphique en Python. Élémentaire élémentaire
[python] Créer une table de pandas DataFrame vers postgres
CSV en Python
format en python
Je veux écrire en Python! (1) Vérification du format de code
Développement d'applications pour tweeter en Python à partir de Visual Studio 2017
Stocker csv sur GCS à partir de la plate-forme AI dans DataFrame
Comment télécharger des fichiers depuis Selenium of Python dans Chrome
Convertir / renvoyer des objets de classe au format JSON en Python
Exécuter la fonction Python à partir de Powershell (comment passer des arguments)
Script Python qui crée un fichier JSON à partir d'un fichier CSV
python> datetime> De la chaîne de date (format ISO: 2015-12-09 12:40:08) au type datetime
Je veux utiliser le jeu de données R avec python
Supprimer les en-têtes de fichiers CSV à plusieurs formats avec python
[python] Utilisez DataFrame pour étiqueter ensemble des variables et des tableaux arbitraires et les enregistrer dans csv [pandas]
2015-12-26 python2> datetime> Implémentation pour prendre la différence en secondes entre deux chaînes datetime au format ISO> Utiliser .seconds ()