Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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
like image 651
collarblind Avatar asked Jul 20 '15 16:07

collarblind


2 Answers

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
like image 50
JohnE Avatar answered Nov 06 '22 19:11

JohnE


This is if you want to make sure its added to the DataFrame.

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

like image 42
Redz Ch Avatar answered Nov 06 '22 18:11

Redz Ch