Can you format pandas integers for display, like `pd.options.display.float_format` for floats? Can you format pandas integers for display, like `pd.options.display.float_format` for floats? python python

Can you format pandas integers for display, like `pd.options.display.float_format` for floats?


You could monkey-patch pandas.io.formats.format.IntArrayFormatter:

import contextlibimport numpy as npimport pandas as pdimport pandas.io.formats.format as pfnp.random.seed(2015)@contextlib.contextmanagerdef custom_formatting():    orig_float_format = pd.options.display.float_format    orig_int_format = pf.IntArrayFormatter    pd.options.display.float_format = '{:0,.2f}'.format    class IntArrayFormatter(pf.GenericArrayFormatter):        def _format_strings(self):            formatter = self.formatter or '{:,d}'.format            fmt_values = [formatter(x) for x in self.values]            return fmt_values    pf.IntArrayFormatter = IntArrayFormatter    yield    pd.options.display.float_format = orig_float_format    pf.IntArrayFormatter = orig_int_formatdf = pd.DataFrame(np.random.randint(10000, size=(5,3)), columns=list('ABC'))df['D'] = np.random.random(df.shape[0])*10000with custom_formatting():    print(df)

yields

      A     B     C        D0 2,658 2,828 4,540 8,961.771 9,506 2,734 9,805 2,221.862 3,765 4,152 4,583 2,011.823 5,244 5,395 7,485 8,656.084 9,107 6,033 5,998 2,942.53

while outside of the with-statement:

print(df)

yields

      A     B     C            D0  2658  2828  4540  8961.7652601  9506  2734  9805  2221.8647792  3765  4152  4583  2011.8237013  5244  5395  7485  8656.0756104  9107  6033  5998  2942.530551


Another option for Jupyter notebooks is to use df.style.format('{:,}'), but it only works on a single dataframe as far as I know, so you would have to call this every time:

table.style.format('{:,}')          col1       col20s   9,246,452  6,669,310>0   2,513,002  5,090,144table       col1     col20s  9246452  6669310>0  2513002  5090144

Styling — pandas 1.1.2 documentation