I have a DataFrame
:
0 1
0 3.000 5.600
1 1.200 3.456
and for presentation purposes I would like it to be converted to
0 1
0 3 5.6
1 1.2 3.456
What is the elegant way to achieve this (without looping inefficiently over entries of the DataFrame
)?
Or perhaps more generally: is there a way to set pandas
up such that it is always doing this? E.g. one of the pandas
options?
Notice that pd.options.display.float_format = '{:,.0f}'.format
will not work, as it would give a fixed number of decimals, rather than having it vary across entries of the DataFrame
as I indicated above.
In [188]: df
Out[188]:
a b c
0 1.0000 2.2460 2.0000
1 3.0000 4.4920 6.0000
2 5.0000 6.7380 10.0000
In [189]: pd.options.display.float_format = '{:,.2f}'.format
In [190]: df.apply(lambda x: x.astype(int) if np.allclose(x, x.astype(int)) else x)
Out[190]:
a b c
0 1 2.25 2
1 3 4.49 6
2 5 6.74 10
UPDATE:
In [222]: df
Out[222]:
0 1
0 3.0000 5.6000
1 1.2000 3.4560
In [223]: df.applymap(lambda x: str(int(x)) if abs(x - int(x)) < 1e-6 else str(round(x,2)))
Out[223]:
0 1
0 3 5.6
1 1.2 3.46
NOTE: be aware that .applymap() method is pretty slow as it's doing map(func, series)
for each series in the DataFrame
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