I've found a somewhat strange behaviour when I create a Pandas DataFrame from lists and convert it to csv with a specific decimal separator.
This works as expected:
>>> import pandas as pd
>>> a = pd.DataFrame([['a', 0.1], ['b', 0.2]])
>>> a
0 1
0 a 0.1
1 b 0.2
>>> a.to_csv(decimal=',', sep=' ')
' 0 1\n0 a 0,1\n1 b 0,2\n'
However, in this case the decimal separator is not set properly:
>>> b = pd.DataFrame([['a', 'b'], [0.1, 0.2]])
>>> b
0 1
0 a b
1 0.1 0.2
>>> b.to_csv(decimal=',', sep=' ')
' 0 1\n0 a b\n1 0.1 0.2\n'
When I transpose b in order to get a DataFrame like a the decimal separator is still not properly set:
>>> b.T.to_csv(decimal=',', sep=' ')
' 0 1\n0 a 0.1\n1 b 0.2\n'
Why I am asking: In my program I have columns as individual lists (e.g. col1 = ['a', 'b'] and col2 = [0.1, 0.2], but the number and format of columns can vary) and I would like to convert them to csv with a specific decimal separator, so I'd like to have an output like
' 0 1\n0 a 0,1\n1 b 0,2\n'
Use applymap and cast the float typed cells to str by checking explicitly for their type. Then, replace the decimal dot(.) with the comma (,) as each cell now constitutes a string and dump the contents to a csv file later.
b.applymap(lambda x: str(x).replace(".", ",") if isinstance(x, float) else x).to_csv(sep=" ")
# ' 0 1\n0 a b\n1 0,1 0,2\n'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With