-
- Notifications
You must be signed in to change notification settings - Fork 19.4k
Description
Feature Type
-
Adding new functionality to pandas
-
Changing existing functionality in pandas
-
Removing existing functionality in pandas
Problem Description
I noticed that in Pandas version 2.2 the internal implementation of IntArrayFormatter was changed (or at least renamed), marking the classes as private using one underscore. I used the implementation as described here to format integers in a DataFrame on each display.
See changes between 2.1 and 2.2 to make the linked patch work: link
I see that the styler supports formatting thousands:
import pandas as pd pd.options.styler.format.thousands = ',' s = pd.Series([1_000_000]).to_frame() s.style # does change display of s to 1,000,000however
s # will display 1000000 Would it be possible to add the same to the display options?
Feature Description
pd.options.format.thousands = ','
would need to pass:
if pd.options.format.thousands: format_str = f':{pd.options.format.thousands}d'.format else: format_str = ':d'.formatAlternative Solutions
Change the default here
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 = IntArrayFormatterUsing the above patch I get the display I would prefer:
>>> pd.Series([1_000_000]) 0 1,000,000 dtype: int64 Additional Context
Working with large integers in tables is made easier if thousands are visually distinguished. Maybe there is already a way to specify that formatter function (str.format) for display, which would be perfect.