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