Es ist keine große Sache, aber ich war süchtig danach, pandas.DataFrame als csv zu speichern und es mit Rs reader :: tbl_df zu lesen. Notieren Sie sich also die Problemumgehung.
Wenn es um kleine und mittlere Datenrahmen geht, ist es meiner Meinung nach üblich, Pandas für Python und data.frame für R zu verwenden.
Auch das Übergeben von Datenrahmen zwischen Python <=> R kann SQL vermitteln, aber ich denke, CSV ist besser, wenn Sie es einfach machen.
Wenn jedoch pandas.DataFrame einschließlich bool so wie es ist an csv ausgespuckt wird, scheint es, dass es mit read \ _csv nicht als logisch gelesen werden kann. So ↓
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'))
Betrachtet man den Fehler, so scheint es, dass nur T / F, TRUE / FALSE und 0/1 als logisch akzeptiert werden.
# df.to_csv('sample.csv', index=False, encoding='utf-8')
(df * 1).to_csv('sample.csv', index=False, encoding='utf-8')
Du kannst es schaffen. Es setzt True / False auf 1/0. \ * Bei einer Zeichenkette handelt es sich um einen Vorgang, bei dem "" hoge "\ * 2" in "" hogehoge "" geändert wird. Selbst wenn Sie diesmal "\ * 1" mögen, ändert sich nichts.
Wenn es 01 ist, kann es mit read \ _csv gelesen werden.
Die folgende Methode schlägt übrigens fehl.
df.astype(int) #Fehlschlagen, wenn str usw. vorhanden ist.
df.replace({True: 1, False: 0}) #Nichts passiert
df.replace({True: "TRUE", False: "FALSE"}) # 1/0 ist alles in der Zeichenkette(Abbildung unten)
(Bitte sag mir, ob es einen anderen guten Weg gibt)
Recommended Posts