18

I have a column called accountnumber with values similar to 4.11889000e+11 in a pandas dataframe. I want to suppress the scientific notation and convert the values to 4118890000. I have tried the following method and did not work.

df = pd.read_csv(data.csv)
pd.options.display.float_format = '{:,.3f}'.format

Please recommend.

iprof0214
  • 701
  • 2
  • 6
  • 19

2 Answers2

16

You don't need the thousand separators "," and the 3 decimals for the account numbers.

Use the following instead.

pd.options.display.float_format = '{:.0f}'.format
Siva-Sg
  • 2,741
  • 19
  • 27
  • yes, this works, when I just print df.Accountnumber it displays converted values. However, when I print df.Accountnumber.unique(), it still shows all values in exponential format. – iprof0214 Apr 18 '18 at 22:48
  • 1
    In this case, you need to change the data type of account number column , as proposed by @floydn . – Siva-Sg Apr 18 '18 at 22:55
  • you could also change the print format, this solution is better as the original datatype is still valid – PV8 Jun 24 '19 at 09:21
14

I assume the exponential notation for the account numbers must come from the data file. If I create a small csv with the full account numbers, pandas will interpret them as integers.

     acct_num
0  4118890000
1  9876543210

df['acct_num'].dtype
Out[51]: dtype('int64')

However, if the account numbers in the csv are represented in exponential notation then pandas will read them as floats.

       acct_num
0  4.118890e+11
1  9.876543e+11

df['acct_num'].dtype
Out[54]: dtype('float64')

You have 2 options. First, correct the process that creates the csv so the account numbers are written out correctly. The second is to change the data type of the acct_num column to integer.

df['acct_num'] = df['acct_num'].astype('int64')

df
Out[66]: 
       acct_num
0  411889000000
1  987654321000
floydn
  • 1,083
  • 7
  • 14