1

I have pandas column named Price_col. which look like this.

       Price_col
    1. 1000000.000
    2. 234556.678900
    3. 2345.00
    4.
    5. 23.56

I am trying to add commas to my Price_col to look like this.

       Price_col
    1. 1,000,000.000
    2. 234,556.678900
    3. 2,345.00
    4.
    5. 23.56

when I try convert the values it always round off. is there way that I can have original value without rounding off.

I tried below code. this what I got for the value 234556.678900.

n = "{:,}".format(234556.678900)
print(n)
>>> 234,556.6789

rohi
  • 175
  • 10

2 Answers2

3

Add f for fixed-point

>>> "{:,}".format(234556.678900)
'234,556.6789'
>>> "{:,f}".format(234556.678900)
'234,556.678900'

You can also control the precision with .p where p is the number of digits (and should probably do so) .. beware, as you're dealing with floats, you'll have some IEEE 754 aliasing, though representation via format should be quite nice regardless of the backing data

>>> "{:,.5f}".format(234556.678900)
'234,556.67890'
>>> "{:,.20f}".format(234556.678900)
'234,556.67889999999897554517'

The full Format Specification Mini-Language can be found here:
https://docs.python.org/3/library/string.html#format-specification-mini-language

ti7
  • 16,375
  • 6
  • 40
  • 68
  • Thankyou so much is there a way that I can apply this for a entire column in a single statement without looping through and changing value one by one. – rohi Jan 22 '22 at 05:07
1

From your comment, I realized you may really want something else as described in How to display pandas DataFrame of floats using a format string for columns? and only change the view of the data

Creating a new string column formatted as a string

>>> df = pd.DataFrame({"Price_col": [1000000.000, 234556.678900, 2345.00, None, 23.56]}
>>> df["price2"] = df["Price_col"].apply(lambda x: f"{x:,f}")
>>> df
      Price_col            price2
0  1000000.0000  1,000,000.000000
1   234556.6789    234,556.678900
2     2345.0000      2,345.000000
3           NaN               nan
4       23.5600         23.560000
>>> df.dtypes
Price_col    float64
price2        object
dtype: object

Temporarily changing how data is displayed

>>> df = pd.DataFrame({"Price_col": [1000000.000, 234556.678900, 2345.00, None, 23.56]}
>>> print(df)
      Price_col
0  1000000.0000
1   234556.6789
2     2345.0000
3           NaN
4       23.5600
>>> with pd.option_context('display.float_format', '€{:>18,.6f}'.format):
...     print(df)
... 
            Price_col
0 €  1,000,000.000000
1 €    234,556.678900
2 €      2,345.000000
3                 NaN
4 €         23.560000
>>> print(df)
      Price_col
0  1000000.0000
1   234556.6789
2     2345.0000
3           NaN
4       23.5600
ti7
  • 16,375
  • 6
  • 40
  • 68