Projectfreak
Projectfreak

Reputation: 43

Printing AND writing the RIGHTLY formatted number

While being able to print # of decimals in console, I am significantly more challenged when attempting to write to a csv with the RIGHTLY formatted number. In the code below I somehow managed to divide integers in '000s, and have the result thrown into a csv, but I cannot get rid of the extra ".,". The for loop is really a hard challenge. Maybe, someone could tell me how to crack the puzzle.

View code strings below. Should have looked like, both in print in console AND in the csv file I am writing to:

23,400,344.567, 54,363,744.678, 56,789,117.456, 4,132,454.987

INPUT:

import pandas as pd

def insert_comma(s):
     str=''
     count=0
     for n in reversed(s):
          str += n
          count+=1
          if count == 3:
               str += ','
               count=0

     return ''.join([i for i in reversed(str)][1:])


d = {'Quarters' : ['Quarter1','Quarter2','Quarter3','Quarter4'],
 'Revenue':[23400344.567, 54363744.678, 56789117.456, 4132454.987]}
df=pd.DataFrame(d)

df['Revenue']=df.apply(lambda x: insert_comma(str(x['Revenue'] / 1000)), axis=1)

# pd.options.display.float_format = '{:.0f}'.format

df.to_csv("C:\\Users\\jcst\\Desktop\\Private\\Python data\\new8.csv", sep=";")

# round to two decimal places in python pandas

# .options.display.float_format = '{:.0f}'.format
print(df)

OUTPUT

   Quarters      Revenue
0  Quarter1  234,00.,344
1  Quarter2  543,63.,744
2  Quarter3  567,89.,117
3  Quarter4    1,32.,454

Upvotes: 1

Views: 82

Answers (3)

jose_bacoy
jose_bacoy

Reputation: 12704

You can use this. Use format string to use comma(s) and 3 decimal places for all rows in Revenue column.

df['Revenue']=df['Revenue'].apply('{0:,.3f}'.format)

Result:

   Quarters         Revenue
0  Quarter1  23,400,344.567
1  Quarter2  54,363,744.678
2  Quarter3  56,789,117.456
3  Quarter4   4,132,454.987

Upvotes: 4

sanzoghenzo
sanzoghenzo

Reputation: 658

This works for me:

df['Revenue'] = df['Revenue'].apply(lambda x:f"{x:,.3f}")

This solution uses Python 3.6+ f-strings to insert commas as thousand separator and show 3 decimals.

Upvotes: 1

meissner_
meissner_

Reputation: 541

Suggestion:

insertCommas = lambda x: format(x, ',')

Works like this:

>>> insertCommas(23400344.567)
'23,400,344.567'

Upvotes: 1

Related Questions