When I save a DataFrame with boolean columns, CSV.write them as strings: “false” and “true”, so it increases file sizes.
How to save the boolean columns into 0 and 1.
Thank you in advance.
When I save a DataFrame with boolean columns, CSV.write them as strings: “false” and “true”, so it increases file sizes.
How to save the boolean columns into 0 and 1.
Thank you in advance.
Would using something like Int8.() before writing the csv work?
I try to convert
df[:,:ART]= Int8.(df[:,:ART])
But for some reasons, it doesn’t help =((
I can’t covert bool to int =((
dff=DataFrame(id=[1,2,3],b=[true,false,true])
dff[:,:b]=Int8.(dff[:,:b])
typeof(dff.b)
If you don’t mind changing some internal CSV behaviour in your module, you can use
CSV.writecell(buf,pos,len,io, x::Bool, opts) = CSV.writecell(buf,pos,len,io, x ? "1" : "0",opts)
Thank you. It works, even I don’t think it is the best, but I will use it.
If you do dff.b = Int8.(dff.b) instead, I think it will work. The difference must be that this is overwriting the entire column (which changes the type), but you were just overwriting the values with dff[:,:b]=Int8.(dff[:,:b]), which left the type as is.
Anyway, let me know if it works.
yes, you are right
is alternatively written as dff[!, :b] = Int8.(dff.b). Using : instead of ! means that you request an in-place operation while ! indicates that you want to replace the old vector with a new one.