Search code examples
pythonpandascurrency

Convert currency to float (and parentheses indicate negative amounts)


I have a df with currency:

df = pd.DataFrame({'Currency':['$1.00','$2,000.00','(3,000.00)']})

     Currency
0       $1.00
1   $2,000.00
2  (3,000.00)

I want to convert the 'Currency' dtype to float but I am having trouble with the parentheses string (which indicate a negative amount). This is my current code:

df[['Currency']] = df[['Currency']].replace('[\$,]','',regex=True).astype(float)

which produces an error:

ValueError: could not convert string to float: (3000.00)

What I want as dtype float is:

     Currency
0       1.00
1   2000.00
2  -3000.00

Solution

  • Just add ) to the existing command, and then convert ( to - to make numbers in parentheses negative. Then convert to float.

    (df['Currency'].replace( '[\$,)]','', regex=True )
                   .replace( '[(]','-',   regex=True ).astype(float))
    
       Currency
    0         1
    1      2000
    2     -3000