Quando si salva un DataFrame di Pandas in csv, alcuni numeri interi vengono convertiti in float. Succede dove una colonna di float ha valori mancanti (np.nan
).Esportazione di interi con valori mancanti in csv in Pandas
C'è un modo semplice per evitarlo? (Specialmente in modo automatico -. Ho a che fare spesso con molte colonne di vari tipi di dati)
Per esempio
import pandas as pd
import numpy as np
df = pd.DataFrame([[1,2],[3,np.nan],[5,6]],
columns=["a","b"],
index=["i_1","i_2","i_3"])
df.to_csv("file.csv")
rendimenti
,a,b
i_1,1,2.0
i_2,3,
i_3,5,6.0
Quello che vorrei ottenere è
,a,b
i_1,1,2
i_2,3,
i_3,5,6
MODIFICA: Sono pienamente a conoscenza di Support for integer NA - Pandas Caveats and Gotchas. La domanda è quale sia una buona soluzione (soprattutto nel caso in cui ci siano molte altre colonne di vario tipo e non so in anticipo quali colonne "integer" abbiano valori mancanti).
Perché questo è un problema , non c'è modo di rappresentare 'NaN' per ints quindi la conversione in float. Dovresti sostituire i valori di 'NaN' con qualcosa che può essere rappresentato come un int come' 0', o convertire in stringa e sostituire la stringa 'nan' con un valore vuoto e quindi esportare – EdChum
@EdChum So che' NaN' sono galleggianti. Solo è fastidioso che non ci sia "missing int" (dal punto di vista dei dati - un campo mancante è un campo mancante, non c'è nulla di speciale nella mancanza dei float). Il fatto è che non voglio esportare un int mancante come '0', ma come campo vuoto (per alcune applicazioni converto gli interi mancanti a' -1', ma per altri potrebbe essere problematico). –
@PiotrMigdal Penso che il tuo unico scatto qui in quel caso sia convertire in stringhe e riempire nan con stringhe vuote, come già suggerito – Korem